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
//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++;
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;
}