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

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?


boiustef: atenţie la cazurile când numerele se termină cu zerouri!

Răspunsuri la întrebare

Răspuns de boiustef
0

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!


StelicaBulbuc: Mersi!
Alte întrebări interesante