Salut
Am o problema pe pbinfo la care primesc doar 20 pcte, dar mie mi se pare corect codul.
Cerinta:
Se dau 2 numere naturale cu exact 3 cifre fiecare, să se afișeze cel mai mare și cel mai mic număr de două cifre scris cu o cifră din primul număr și cu o cifră din al doilea.
Date de intrare
Programul citește de la tastatură 2 numere separate prin spații.
Date de ieșire
Programul va afișa pe ecran cel mai mare și cel mai mic număr de două cifre scris cu o cifră din primul număr și cu o cifră din al doilea în această ordine, separate prin spații.
Restricții și precizări
100 ≤ a ≤ b ≤ 999
Codul meu:
#include
using namespace std;
int a(int x)
{
int a=0;
while(x)
{
if(a
a=x%10;
x/=10;
}
return a;
}
int b(int x)
{
int a=10;
while(x)
{
if(a>x%10)
a=x%10;
x/=10;
}
return a;
}
int main()
{
int m, n, n1, n2, m1, m2;
cin>>n>>m;
n1=a(n);
n2=b(n);
m1=a(m);
m2=b(m);
if(m1>n1)
cout<
else
cout<
if(n2>m2)
cout<
else
cout<
}
pareri?
Răspunsuri la întrebare
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!