Buna, de ce imi da doar 60p la aceasta problema? (#999 Numere7 de pe pbinfo)
Cerința
Se dau două numere naturale diferite. Afişaţi cel mai mic număr care poate fi scris folosind toate cifrele celor două numere date.
Date de intrare
Fișierul de intrare numere7.in conține pe prima linie cele două numere.
Date de ieșire
Fișierul de ieșire numere7.out va conține pe prima linie numărul cerut.
Restricții și precizări
cele două numere date vor fi mai mici decât 2 000 000 000
Exemplu
numere7.in
36321 4173
numere7.out
112333467
#include
#include
#include
using namespace std;
ifstream cin("numere7.in");
ofstream cout("numere7.out");
int main(){
bool zcase = false;
int n, m;
cin >> n >> m;
int v[100], a[100];
int allnum[100], k = 0;
while(n){
allnum[k++] = n % 10;
if(n % 10 == 0) zcase = true;
n /= 10;
}
while(m){
allnum[k++] = m % 10;
if(m % 10 == 0) zcase = true;
m /= 10;
}
if(k == 0) cout << 0;
sort(allnum, allnum + k);
if(zcase){
int switchdex = 0;
for(int i = 0; i < k && switchdex == 0; i++){
if(allnum[i] != 0) switchdex = i;
}
swap(allnum[0], allnum[switchdex]);
for(int i = 0; i < k; i++){
cout << allnum[i];
}
}
else{
for(int i = 0; i < k; i++){
cout << allnum[i];
}
}
}
Răspunsuri la întrebare
PROBLEMA SE POATE FACE SI MAI ELEGANT SI CHIAR LINIAR DAR ASTA E CEL MAI USOR DE INTELES
#include<fstream>
using namespace std;
int main() {
int n = 0, v[21], n1 = 0, n2 = 0;
ifstream fin("numere7.in");
fin >> n1 >> n2;
fin.close();
ofstream fout("numere7.out");
if (n1 == 0 && n2 == 0)
fout << 0;
else {
if (n1 == 0)
n++;
while (n1 != 0) {
v[++n] = n1 % 10;
n1 /= 10;
}
if (n2 == 0)
n++;
while (n2 != 0) {
v[++n] = n2 % 10;
n2 /= 10;
}
for (int i = 1; i <= n - 1; i++)
for (int j = i + 1; j <= n; j++)
if (v[i] > v[j]) {
int aux = v[i];
v[i] = v[j];
v[j] = aux;
}
if (v[1] == 0) {
int i = 1;
while (v[i] == 0)
i++;
v[1] = v[i];
v[i] = 0;
}
for (int i = 1; i <= n; i++)
fout << v[i];
}
fout.close();
return 0;
}