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

Salut , am o problemă cu această problemă:
Cerința
Se citesc 2 numere naturale, cu cel mult 12 cifre fiecare. Să se afișeze cel mai mic și cel mai mare număr având exact două cifre, format cu o cifră din primul număr și cu o cifră din al doilea.

Date de intrare
Programul citește de la tastatură cele 2 numere separate printr-un spațiu.

Date de ieșire
Programul va afișa pe ecran cel mai mic și cel mai mare număr de exact două cifre format cu o cifră din primul număr și cu o cifră din al doilea, separate printr-un spațiu.

Restricții și precizări
cele două numere citite vor fi mai mici decât 1.000.000.000.000

Exemplu
Intrare

293 412
Ieșire

12 94
Explicație
1 și 2 sunt cele mai mici cifre din al doilea respectiv primul număr și astfel se formează 12, iar 9 și 4 sunt cele mai mari cifre din primul respectiv al doilea număr și astfel se formează 94.
Va rog din suflet daca puteti ajutati-ma . Eu am rezolvat-o asa :
#include
using namespace std;

int main()
{
int n,m,maxx1=0,maxx2=0,minn1=9,minn2=9,c,x,uc;
cin>>n>>m;
while(n)
{
uc=n%10;
if(maxx1 maxx1=uc;
if(minn1>uc)
minn1=uc;
n/=10;
}
while(m)
{
uc=m%10;
if(maxx2 maxx2=uc;
if(minn2>uc)
minn2=uc;
m/=10;
}
if(minn1!=0 && minn2!=0)
{if(minn1 c=minn1*10+minn2;
else
c=minn2*10+minn1;}

else
if(minn1==0 && minn2!=0)
c=minn2*10+minn1;
else
if(minn1!=0 && minn2==0)
c=minn2*10+minn1;
else
if(minn1==0 && minn2==0)
c=0;

if(maxx1!=0 && maxx2!=0)
{if(maxx1>maxx2)
x=maxx1*10+maxx2;
else
x=maxx2*10+maxx1;
}
cout< return 0;
}


boiustef: cu max e clar, dar cu min e problemă... dacă ai numerele 654200 şi 76543 maximul e 76, dar care e minimul ?
boiustef: eu am pus cifrele numerelor în vectori pe care iam sortat. Dacă vrei varianta mea de 100 dai de stire
boiustef: Aici e gresit
if(minn1!=0 && minn2==0)
c=minn2*10+minn1;
boiustef: codul tău nu se vede complet... nu putem să-l comentăm

Răspunsuri la întrebare

Răspuns de boiustef
0

#include <iostream>

#include <algorithm>

using namespace std;

short a[13], b[13], nrmin, nrmax, i, j, nrcifa, nrcifb;

long long m, n;

int main()

{

   cin >> m >> n;

   while (m)

   {

       ++nrcifa; a[nrcifa]=m%10;

       m/=10;

   }

   sort(a+1, a+nrcifa+1);

   while (n)

   {

       ++nrcifb; b[nrcifb]=n%10;

       n/=10;

   }

   sort(b+1, b+nrcifb+1);

   nrmax=max(a[nrcifa],b[nrcifb])*10+min(a[nrcifa],b[nrcifb]);

   if (a[1] && b[1]) nrmin=min(a[1],b[1])*10+max(a[1],b[1]);

   else

   {

       if (a[1]==0 && b[1])

       {

           j=1; while (a[j]==0) ++j;

           if (a[j]<b[1]) nrmin=a[j]*10+b[1];

           else nrmin=b[1]*10;

       }

       if (a[1] && b[1]==0)

       {

           j=1; while (b[j]==0) ++j;

           if (b[j]<a[1]) nrmin=b[j]*10+a[1];

           else nrmin=a[1]*10;

       }

       if (a[1]==0 && b[1]==0)

       {

           j=1; while (a[j]==0) ++j;

           i=1; while (b[i]==0) ++i;

           nrmin=min(a[j], b[i])*10;

       }

   }

   cout << nrmin << " " << nrmax;

   return 0;

}

Alte întrebări interesante