Informatică, întrebare adresată de SirJew, 9 ani în urmă

Se citesc numerele naturale n şi S, unde n poate fi 2, 3, 4 sau 5. Să se afişeze toate numerele de n cifre care au cifrele în ordine strict crescătoare, iar suma cifrelor este S. De exemplu, pentru n=2 şi S=10, se vor afişa 19, 28, 37, 46.

Răspunsuri la întrebare

Răspuns de stteph
2
#include <iostream>
using namespace std;
int n,s,i,y,sumcif,nrcifdesc,c1,c2;
int main ()
{cin>>n>>s;
if (n==2) {i=10;
n=99;}
else
if (n==3) {i=100;
n=999;}
else
if (n==4) {i=1000;
n=9999;}
else
if (n==5) {i=10000;
n=99999;} //am vazut cate cifre are numarul ca sa stim cum pornim
for (i=1;i<=n;i++)
{nrcifdesc=0;
y=i;
sumcif=0;
while (y>0)
{c=y%10; //extragem cifra
y=y/10; //o dam la o parte
sumcif=sumcif+c; //o adunam la suma
}
y=i;
while (y>0)
{c1=y%10; //extragem o cifra
c2=y/10%10; //o extragem si pe a doua
y=y/10; //dam o cifra la o parte
if (c1<c2)  //verificam daca sunt in ordine descrescatoare
nrcifdesc++;  //crestem cifrele in ordine descrescatoare
}
if (nrcifdesc==0&&sumcif==s) //daca suma cifrelor e s si nu avem cifre in ordine descrescatoare=>cifrele sunt in ordine crescatoare
cout<<i<<endl; (endl sau '\n' depinde ce folosesti) //afisam cifra
}
return 0;
}


HariSeldon: In loc de struct if de la inceput puteai zice direct i = pow(10,n-1);
HariSeldon: si mergeai pana la stop = pow(10,n);
stteph: nu e avansat sa stie asa ceva..
stteph: puteam sa ii fac fara stream-uri daca vroia mai eficient, dar nici nu stiu daca lucreaza in C sau C++
stteph: SAU FREE PASCAL
Alte întrebări interesante