Informatică, întrebare adresată de info987, 8 ani în urmă


Cerinţa
Se citește de la tastatură un număr natural n, apoi n numere naturale. Să se afişeze cel mai mic număr care poate fi scris folosind cifra minimă a fiecărui număr citit.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi cele n numere naturale, separate prin spaţii.

Date de ieşire
Programul afișează pe ecran numărul MIN, cel mai mic număr care poate fi scris folosind cifra minimă a fiecărui număr citit.

Restricţii şi precizări
0 < n < 1000
cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu
Intrare

5
100 312 276 985 5021
Ieșire

10025


#include
#include

using namespace std;

int main()
{

int n,i,j,k,min=0,z, aux, , aoleu=10, cifmin=9;
cin>>n;
int v[10000], p[1000];
for(i=1; i<=n; i++)
{cin>>k;
z=k;

while(k!=0)
if(k%10 {cifmin=k%10;
k=k/10;}}
p[i]=z;
for(i=1; i for(j=i+1; j<=n; j++)
if(p[i]

{aux=p[i];
p[i]=p[j];
p[j]=aux;}
for(i=1; i<=n; i++)
cout<




return 0;
}

Răspunsuri la întrebare

Răspuns de ProMinecraft69
1

Răspuns:

Explicație:

#include <iostream>

using namespace std;

int Freq[10]; /// frecventa cifrelor

int main()

{

   long long n, numar;

   cin >> n;

   for(int i = 1; i <= n; i++)

   {

       cin >> numar;

       int min = 10;

       while(numar)

       {

           if(numar % 10 < min)

               min = numar % 10;

           numar /= 10;

       }

       Freq[min] += 1;

   }

   if(Freq[0] != 0) /// ma asigur ca nu incep numarul cu cifra 0

   {

       int i = 1; /// pornesc de la cifra 1

       while(Freq[i] == 0) /// cat timp n-am gasit cea mai mica cifra diferita de 0

       {

           i += 1;

       }

       cout << i ;

       Freq[i] -= 1;

   }

   /// tu ai numarul maxim de numere = 999 deci numarul tau trebuie sa contina maxim 999 de cifre.. si asta nu admite long long

   /// astfel aplic metoda vectorului de frecventa si afisez cele mai mici cifre in ordine crescatoare asigurandu-ma ca nu incep cu 0

   for(int i = 0; i < 10; i++)

   {

       while(Freq[i] != 0)

       {

           cout << i;

           Freq[i] -= 1;

       }

   }

   return 0;

}

Sper sa fie bine, nu stiu care este problema si nu am putut testa decat pe exemplul dat!


info987: multumesc!! am refacut codul intre timp, e mai usorr
info987: #include
#include

using namespace std;

int main()
{

int n,i,j,k, min=0, z, aux,cifmin=9;
cin>>n;
int p[10000];
for(i=1; i<=n; i++)
{

cin>>k;
cifmin=9;
while(k!=0)
{
if((k%10) cifmin=k%10;
k=k/10;
p[i]=cifmin;

}}

for(i=1; i for(j=i+1; j<=n; j++)
if(p[i]>p[j])
{
aux=p[i];
p[i]=p[j];
p[j]=aux;
}

if(p[1]==0)
{

for(i=2; i<=n; i++)
if(p[i]!=0)
{
p[1]=p[i];
p[i]=0;
break;
}
}

for(i=1; i<=n; i++)
cout<
return 0;
}
Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

int n, i, num, cif, fr[10], cifmin, j;

int main()

{

   cin >> n;

 

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

   {

       cin >> num;

       cifmin=10;

       while (num)

       {

           cif=num%10;

           if (cif<cifmin) cifmin=cif;

           num=num/10;

       }

       ++fr[cifmin];

   }

   cif=0;

   while (fr[cif]==0) ++cif;

   if (cif>0)

   {

       for (i=cif; i<10; ++i)

       {

           if (fr[i]>0) {

           for (j=1; j<=fr[i]; ++j)

               cout << cif; }

       }

   }

   else

   {

       i=1;

       while (fr[i]==0) ++i;

       cout << i; --fr[i];

       for (i=0; i<10; ++i)

       {

           if (fr[i]>0) {

           for (j=1; j<=fr[i]; ++j)

               cout << i; }

       }

   }

}

Explicație:

Alte întrebări interesante