👤

Buna! M-ati putea ajuta si pe mine la problema #2750 de pe pbinfo: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.

Rezolvarea mea primeste doar 20 de puncte. Multumesc!

#include
using namespace std;
int x[1000],v[1000];
int main()
{long long a,b,t=0,m=0,maxim=-1,minim=100000;
cin>>a>>b;
while(a)
{ t++;
x[t]=a%10;
a=a/10;
}
while(b)
{m++;
v[m]=b%10;
b=b/10;
}
for(int i=1;i<=t;i++)
for(int k=1;k<=m;k++)
{if(x[i]*10+v[k]>maxim)
maxim=x[i]*10+v[k];
if(v[k]*10+x[i]>maxim)
maxim=v[k]*10+x[i];
if(x[i]*10+v[k] minim=x[i]*10+v[k];
if(v[k]*10+x[i] minim=v[k]*10+x[i];
}
cout< return 0;
}


Răspuns :

Răspuns:

#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;

}

Explicație:

Dacăai rezolvat o problemă asemănătoare MinMax2, atunci aici era mai uşor