👤

Cerința
Dându-se un număr natural nenul S, să se afișeze în ordine crescătoare toate numerele naturale cu cifre distincte care au suma cifrelor egală cu S.

Date de intrare
Programul citește de la tastatură numărul S.

Date de ieșire
Programul va afișa pe ecran pe câte o linie și în ordine crescătoare numerele de cifre distincte care au suma cifrelor egală cu S. Dacă problema nu are nicio soluție, atunci se va afișa doar valoarea -1.

Restricții și precizări
1 ≤ S ≤ 44


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int n,s,i,ci,x,sw;

int cifre(int x)

{

   int cx=x;

   int fr[10]= {0};

   while(x)

   {

       if (fr[x % 10])

           break;

       fr[x%10] = 1;

       x/=10;

   }

   if(x==0)

   {

       cout<<cx<<endl;

       return 1;

   }

   return 0;

}

int main()

{

   cin>>n;

   for(i=1; i<=999999999; i++)

   {

       ci=i;

       s=0;

       while(ci)

       {

           s=s+ci%10;

           ci/=10;

       }

       if(s==n)

       {

           x=cifre(i);

           if(x)

               sw=1;

       }

   }

   if(sw==0)

       cout<<-1;

   return 0;

}

Explicație:

Un program foarte ineficient dar functioneaza. Subprogramul cifre verifica daca cifrele sunt diferite si scrie numarul daca convine cerintei.

in main doar generez toate numerele si verific daca suma cifrelor este egala cu numarul
Revin maine daca il refac mai eficient