Se consideră N, un număr natural nenul. Dorim să-l scriem pe N ca sumă a două numere naturale nenule x și y, astfel încât suma cifrelor numerelor x și y să fie maximă.
Cerința
Scrieţi un program care să rezolve următoarele cerinţe:
1. să determine suma maximă a cifrelor a două numere x și y cu proprietatea că x+y=N;
2. să determine două numere naturale nenule xmax și ymax cu proprietatea că xmax≥ymax, xmax+ymax=N, suma cifrelor lor este maximă, iar diferența xmax-ymax este maximă;
3. să determine două numere naturale nenule xmin și ymin cu proprietatea că xmin≥ymin, xmin+ymin=N, suma cifrelor lor este maximă, iar diferența xmin-ymin este minimă.
Date de intrare
Fişierul de intrare nxy.in conține pe prima linie numărul natural c, reprezentând cerința (1, 2 sau 3). Pe cea de a doua linie se află numărul natural N.
Date de ieșire
Fişierul de ieșire nxy.out va conține o singură linie. Dacă c=1, pe prima linie va fi scris un număr natural s, reprezentând suma maximă a cifrelor a două numere naturale nenule x și y pentru care x+y=N.
Dacă c=2 sau c=3, pe prima linie vor fi scrise două numere naturale nenule separate printr-un singur spațiu, reprezentând soluţia pentru cerința respectivă (xmax ymax pentru c=2, respectiv xmin ymin pentru c=3).
Restricții și precizări
1 < N ≤ 1018- Pentru teste valorând 20% din punctaj cerința este 1. Pentru teste valorând 40% din punctaj cerința
este 2. Pentru teste valorând 40% punctaj cerința este 3.
Exemplu 1:
nxy.in
1 25
nxy.out
16
Explicație
Suma maximă care se poate obţine adunând cifrele a două numere x și y pentru care x+y=25 este 16.
Exemplu 2:
nxy.in
2 25
nxy.out
19 6
Explicație
Suma maximă care se poate obține adunând cifrele a două numere x și y pentru care x+y=25 este 16. Perechea de numere xmax≥ymax pentru care xmax-ymax este maximă (13) și pentru care suma cifrelor este maximă este xmax=19 și ymax=6.
Exemplu 3:
nxy.in
3 25
nxy.out
16 9
Explicație
p.Suma maximă care se poate obține adunând cifrele a două numere x și y pentru care x+y=25 este 16. Perechea de numere xmin≥ymin pentru care xmin-ymin este minimă (7) și pentru care suma cifrelor este maximă este xmin=16 și ymin=9.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema nxy:
#include <fstream>
using namespace std;
ifstream fin("nxy.in");
ofstream fout("nxy.out");
long long int n, rezx, rezy, rezxx, rezyy;
int c[20];
int x[20];
int y[20];
int xx[20];
int yy[20];
int sum, lg, lgx, lgy, lgxx, lgyy, sum2;
int cerinta;
int main()
{int i, t, tt, val, unde;
fin>>cerinta;
fin>>n;
while (n)
{
c[lg++]=n%10;
n/=10;
}
//xmax ymax
for (t=i=0; i<lg-1; i++)
{
x[i]=9;
y[i]=c[i]-t-x[i];
if (y[i]<0) {y[i]+=10; t=1;}
else t=0;
}
x[i]=c[i]-t;
lgx=lg; lgy=lg-1;
if (x[i]==0) lgx=lg-1;
for (i=lgx-1; i>=0; i--) {sum+=x[i]; rezx=rezx*10+x[i];}
for (i=lgy-1; i>=0; i--) {sum+=y[i]; rezy=rezy*10+y[i];}
//xmin ymin
unde=lg-1;
while (1)
{
for (tt=i=0; i<unde; i++)
{
yy[i]=9;
xx[i]=c[i]-9-tt;
if (xx[i]<0) {tt=1; xx[i]=xx[i]+10;}
else tt=0;
}
val=0; i=lg-1;
while (i>=unde) {val=val*10+c[i];i--;}
val-=tt;
if (val>0)
{
yy[unde]=val/2;
xx[unde]=val-yy[unde];
rezxx=xx[unde]; rezyy=yy[unde];
for (i=unde-1; i>=0; i--) rezxx=rezxx*10+xx[i];
for (i=unde-1; i>=0; i--) rezyy=rezyy*10+yy[i];
if (rezxx>=rezyy) break;
else unde--;
}
else unde--;
}
if (cerinta==1)
fout<<sum<<'\n';
else
if (cerinta==2)
{
if (rezy==0) {rezx--; rezy=1;}
fout<<rezx<<' '<<rezy<<'\n';
}
else
fout<<rezxx<<' '<<rezyy<<'\n';
fout.close();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #2485 nxy
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2485 nxy de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!