Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Zahlenspiel (Schleifen)

In einem Spiel werden die Zahlen von 1 bis n durchgezählt. Man kann nun folgende Feststellung machen: Die 12. Zahl, die mit den Ziffern 253 beginnt, ist 25 300; denn 253 ist die 1., 2530 die 2., 2531 die 3., 2539 die 11., und 25 300 die 12. Zahl.

Schreiben Sie eine Programm, das die 1000. Zahl ermittelt, die mit den Ziffern 9876 beginnt.

Zusatzaufgabe: Verallgemeinern Sie die Aufgabe (die n-te Zahl, die mit vorgegebenen Ziffern beginnt).

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

5 Lösung(en)

def nzahl(basis,n ):
    jj=0
    z=basis
    s=''
    while (jj < n):
        s =str(z)
        if s.startswith(str(basis)):
            jj+=1

        z+=1

    return z-1
    
print nzahl(253, 12)
                
function getNthNumberStartingWithX(nth, x) {
  let i = x, count = 0;
   x = x.toString();
   while (count < nth) {
     if (i.toString().indexOf(x) == 0) count++;
     i++;
   }
   return i;
}

console.log(getNthNumberStartingWithX(1000, 9876));
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET Core 3.x
// Lösung durch Berechnen des Subtrahenden

using System;

namespace CS_MDL_CORE_Zahlenspiel
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetNumber(253, 12));
            Console.WriteLine(GetNumber(253, 112));
            Console.WriteLine(GetNumber(9876, 1000));
        }

        static int GetNumber(int value, int nth)
        {
            var lengthZeros = (int)Math.Log10(nth);
            var leadingZeros = new string('0', lengthZeros);
            var subtrahend = 1;
            var length = 0;
            var exponent = 0;

            if (nth == 0 || nth == 1) return value;

            while (true) // Subtrahenden ermitteln: 2, 12, 112 ...
            {
                var power = (int)Math.Pow(10, exponent);
                if (nth >= subtrahend + power)
                {
                    subtrahend += power;
                    length++;
                }
                else break;
                exponent++;
            }

            return int.Parse(value + (leadingZeros + (nth - subtrahend))[^length..]);
        }
    }
}
                

Lösung von: Jens Kelm (@JKooP)

#include <iostream>
#include <string>
#include <vector>

struct Pair { int val, nth; };

const auto get_number(const Pair& p) {
    const auto leading_zeros{ std::string(long long(log10(p.nth)), '0') };
    auto subtrahend{ 1 }, exponent{ 0 };

    if (p.nth == 0 || p.nth == 1) return p.val;

    while (1) { // Subtrahenden ermitteln: 2, 12, 112, 1112, ... (Zusatzaufgabe)
        const auto power{ int(pow(10, exponent++)) };
        if (p.nth >= subtrahend + power)
            subtrahend += power;
        else break;
    }

    const auto num{ leading_zeros + std::to_string((p.nth - subtrahend)) };
    return std::stoi(std::to_string(p.val) + num.substr(num.length() - (exponent-1ll)));
}

int main() {
    const std::vector<Pair>pairs{ {253, 12}, {253, 112}, {9'876, 1'000}, {9'876, 105'999} };
    for(const auto& pair : pairs)
        std::cout << get_number(pair) << "\n";

    /*  25300
        253000
        9876888
        987694887 (0,04 ms)
    */
}
                

Lösung von: Jens Kelm (@JKooP)

' VBA

Type Pair
    val As Integer
    nth As Integer
End Type

Function GetNumber(pair_ As Pair) As Long
    Set wsf_ = WorksheetFunction
    Dim subtrahend_ As Integer, exponent_ As Integer
    Dim power_ As Long
    Dim leadingZeros_ As String
    
    subtrahend_ = 1
    leadingZeros_ = String(CInt(wsf_.Log10(pair_.nth)), "0")
    
    If pair_.nth = 0 Or pair_.nth = 1 Then
        GetNumber = pair_.val
        Exit Function
    End If
    
    Do While True
        power_ = WorksheetFunction.Power(10, exponent_)
        If pair_.nth > (subtrahend + power_) Then
            subtrahend_ = subtrahend_ + power_
            exponent_ = exponent_ + 1
        Else
            Exit Do
        End If
    Loop
    GetNumber = CLng(CStr(pair_.val) & right(leadingZeros_ & CStr((pair_.nth - subtrahend_)), exponent_))
End Function

Sub Main()
    Dim pair_ As Pair
    pair_.val = 9876
    pair_.nth = 1000
    Debug.Print GetNumber(pair_)
End Sub

                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Die 1000. Zahl, die mit den Ziffern 9876 beginnt, lautet 9 876 888.

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: k.A.
Webcode: vg42-rghx
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Zu Aufgabenblatt hinzufügen