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 ≤ 10
18
- 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!