Răspuns :
Răspuns:
#include <iostream>
using namespace std;
int main()
{
int a, b, max2, min2=0;
cin >> a >> b;
int c1a=a%10, c2a=(a/10)%10, c3a=a/100;
int ordonat_a=0;
while (ordonat_a==0)
{
ordonat_a=1;
if (c1a<c2a) { swap(c1a, c2a); ordonat_a=0; }
if (c2a<c3a) { swap(c2a, c3a); ordonat_a=0; }
if (c1a<c3a) { swap(c1a, c3a); ordonat_a=0; }
}
int c1b=b%10, c2b=(b/10)%10, c3b=b/100;
int ordonat_b=0;
while (ordonat_b==0)
{
ordonat_b=1;
if (c1b<c2b) { swap(c1b, c2b); ordonat_b=0; }
if (c2b<c3b) { swap(c2b, c3b); ordonat_b=0; }
if (c1b<c3b) { swap(c1b, c3b); ordonat_b=0; }
}
max2=max(c1a, c1b)*10+min(c1a, c1b);
if(c3a*c3b!=0) min2=min(c3a,c3b)*10+max(c3a,c3b);
else
{
int m,n;
if (c3a!=0)
{
m=c3a*10;
if (c2b!=0)
{
n=min(c3a,c2b)*10+max(c3a,c2b);
min2=min(m,n);
}
else
{
n=min(c3a,c1b)*10+max(c3a,c1b);
min2=min(m,n);
}
}
else
{
if (c3b!=0)
{
m=c3b*10;
if (c2a!=0)
{
n=min(c2a,c3b)*10+max(c2a,c3b);
min2=min(m,n);
}
else
{
n=min(c1a,c3b)*10+max(c1a,c3b);
min2=min(m,n);
}
}
else
{
if (c2a*c2b!=0) min2=min(c2a,c2b)*10;
else
{
if (c2a!=0)
{
m=c2a*10;
n=min(c1b,c2a)*10+max(c1b,c2a);
min2=min(m,n);
}
else
{
if (c2b!=0)
{
m=c2b*10;
n=min(c1a,c2b)*10+max(c1a,c2b);
min2=min(m,n);
}
else
{
min2=min(c1a,c1b)*10;
}
}
}
}
}
}
cout << max2 << " " << min2;
return 0;
}
Explicație:
cu aflarea lui max2 nu sunt probleme şi logica e clară
Marile probleme încep cu determinarea lui min2. Aici avem cazurile când ambele numere a şi b nu se termină cu zerouri după ce ai ordonat în descreţtere cifrele lor. iară e simplu, dar ce facem dacă unul din numere se termină cu 0, de exemplu după ordonare avem a=610 şi b=543. care e min2? evident nu 30, ci 13. Dacă ambele se termină cu 0? Iată această analiză o ai în codl postat de 100 puncte. Cercetează şi succese!
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!