eMatematikas Prisijunk Forumas VBE užduotys ONLINE testai

Už kelių skaitmens pasikartojimų yra skaičius


Uždavinys:Už kelių  skaitmens  pasikartojimų,  pradedant  skaičiuoti  nuo  nulio yra skaičius.(skaičių intervalas nuo 0 iki 100)
a1, pasikartojantis skaitmuo, o b1 skaitmenų pasikartojimo kiekis. Pvz.: skaičius 11 turi du vienetus taigi tariame, kad vienetas pasikartoja du kartus. Tarkime a1 ir b1 yra 1 ir 10, tai rezultato pirmasis skaičius bus 17.

Man atrodo teisingai, bet neveikia kaip turėtų. Gal galite padėti?
#include <iostream>
using namespace std;
main()
{
    int a1, b1, c1=0, kiek=0, kiek1=0, kiek2=0,kiek3=0, suma=0;//c1=skaiciai nuo 0
    cout << "Iveskite skaiciu" << endl;
    cin>>a1;//1
    cout << "Iveskite kiek kartu skaicius pasikartoja" << endl;
    cin >>b1;//10
    while(c1>=0&&c1<=100&&suma<b1)
    {
    if (c1==a1) kiek++;
    else if (c1/10==a1&&c1%10==a1) kiek3=kiek3+2;
    else if (c1/10==a1) kiek1++;
    else if (c1%10==a1) kiek2++;
    suma=kiek1+kiek2+kiek+kiek3;
    c1++;
    }

    cout << "Vienetu kiekis " << suma << " skaicius " << c1<<  endl;
return 0;
}

pakeista prieš 3 m

Klaida tame, kad jeigu tavo suma >= b1 tu vis tiek dar darai c1++

Mano galva elegantiškesnis sprendimas

#include <iostream>

using namespace std;

int frequencyDigits(int n, int d)
{
    int c = 0;
    while (n > 0) {
        if (n % 10 == d)
            c++;
        n = n / 10;
    }
    return c;
}

int main()
{
    int a1, b1, i, digitCount = 0;
    cin >> a1;
    cin >> b1;
    for (i = 0; i <= 100; i++) {
      digitCount += frequencyDigits(i, a1);
      if (digitCount >= b1) {
        cout << i << endl;
        break;
      }
    }
    return 0;
}

Geriau naudoti for kai žinai iteracijų skaičių.

pakeista prieš 3 m

Ačiū!

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »