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

#2750 GenNr

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.

Imi da mereu 20% si nu inteleg de ce?
#include
using namespace std;
int main()
{
long long n, m, cifmax1=0, cifmin1=9, cifmax2=0;
long long cifmin2=9, nrmax, nrmin, cif;
cin >> n >> m;
while (n)
{
cif=n%10;
if (cif>cifmax1) {cifmax1=cif;}
if (cif n=n/10;
}
while (m)
{
cif=m%10;
if (cif>cifmax2) {cifmax2=cif;}
if (cif m=m/10;
}
nrmax=max(cifmax1,cifmax2)*10 + min(cifmax1,cifmax2);
nrmin=min(cifmin1,cifmin2)*10 + max(cifmin1, cifmin2);
cout << nrmin << " " << nrmax;
return 0;


}


boiustef: aici e pericol si tr sa fii atent la prezenta cifrei 0, iata daca numerele sunt 304 si 52, atunci nrmax se obtine nrmax=54, iar nrmin=02, dupa expresiile din codul tau...
boiustef: clar ca nu e bn
boiustef: sau daca ambele se termina cu zero .... ???? nrmin devine 00 ?
rau ca nu se vede tot codul ....
pmarian98: Am incercat si idea ta
pmarian98: Doar ca depasesc timpul
pmarian98: Acordat
pmarian98: As vrea o sursa, daca se poate? :D

Răspunsuri la întrebare

Răspuns de boiustef
3

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

}



pmarian98: wow
pmarian98: prima data ai construit vectorii cu cifrele numerelor n,m
pmarian98: ati sortat elementele vectorilor, dupa ati luat cifrele cele mai mici si mari din vectror si ati construit numerele nrmin si nrmax
boiustef: just ...
boiustef: referitor la timp a mers cu 0 la toate testele ...
Răspuns de me2018
2

#include <iostream>

using namespace std;

int main()

{

unsigned long long n, m; short int i,j; int x,y,m1,M1,cif1[10]={0},cif2[10]={0};

cin >> n >> m;

m1=100;M1=0;

       do

       {

       cif1[n%10]++;

        n=n/10;

       }

       while(n);

         do

               {

               cif2[m%10]++;

                m=m/10;

               }

          while(m);

   for(i=0;i<10;i++)

    for(j=0;j<10;j++)

            if(cif1[i]&&cif2[j])

           {

               x=i*10+j;

               y=j*10+i;

                if(x>9)

                 {

                   if(x<m1)

                       m1=x;

                   if(M1<x)

                       M1=x;

                 }

               if(y>9)

                  {

                   if(m1>y)

                       m1=y;

                    if(M1<y)

                       M1=y;

                }

            }

  cout<<m1<<" "<<M1;

return 0;

}



pmarian98: mersi pentru ajutor
boiustef: simpatica idee!!! ai testat-o pe pbinfo ?
me2018: da
me2018: solutia este de 100 de puncte
Alte întrebări interesante