Prosila bym pisac prostymi algorytmami na poziomie liceum:)


Dodatnią liczbę całkowitą nazywamy szaloną, jeśli zawiera co najwyżej i cyfr równych i (dla i=1..9) (innymi słowy, jeśli co najwyżej jedna z jej cyfr to 1 oraz jeśli co najwyżej 2 z jej cyfr to 2 itd.).

Twoim zadaniem będzie znalezienie dla danych dwóch liczb całkowitych a,b liczby szalonych liczb nie mniejszych niż a oraz nie większych niż b.
Zadanie

Napisz program, który:

* wczyta ze standardowego wejścia liczby naturalne a,b,
* wypisze na standardowe wyjście liczbę szalonych liczb z przedziału [a,b].

Wejście

W jedynym wierszu wejścia znajdują się dwie liczby całkowite a, b
(1<=a<=b<=2000 000 000) oddzielone pojedynczym odstępem.
Wyjście

W jedynym wierszu wyjścia należy wypisać liczbę szalonych liczb z przedziału [a,b].
Przykład

Dla danych wejściowych:

1 11

poprawną odpowiedzią jest:

10

1

Odpowiedzi

2010-02-14T23:20:07+01:00
#include <iostream>

using namespace std;

//funkcja sprawdza, czy dana liczba jest liczba szalona
bool check (int l)
{
//tablica, przechowujaca liczbe wystapien danej cyfry
int tab[10];

//poczatkowo liczba wystapien wynosi 0
for(int i=0; i<10; i++)
tab[i] = 0;

//przegladamy kolejne cyfry danej liczby
while (l >= 10)
{
int d = l%10;
l = l/10;

tab[d]++;

//jezeli liczba wystapien danej cyfry jest
//od niej wieksza to liczba nie jest liczba szalona
if(tab[d] >d)
return false;
}

return true;
}


int main(int argc, char *argv[])
{
int a,b;
cin>>a;
cin>>b;

int out = 0;

//przechodzimy przez kolejne liczby z zakresu [a,b]
//i sprawdzamy czy aktualna liczba jest liczba szalona
for (int i=a; i<=b; i++)
if( check(i) )
out++;

cout<<out<<endl;

system("PAUSE");
return 0;
}