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:
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!
#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:
#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: