Un copil construiește un triunghi cu numerele naturale nenule astfel:
- în vârful triunghiului scrie valoarea
1
; - completează liniile triunghiului de sus în jos, iar căsuțele de pe aceeași linie de la stânga la dreapta cu numere naturale consecutive, ca în figurile următoare.
În figura 1 este ilustrat un astfel de triunghi având 5
linii, conținând numerele naturale de la 1
la 15
.
În acest triunghi copilul începe să construiască drumuri, respectând următoarele reguli:
- orice drum începe din
1
; - din orice căsuță se poate deplasa fie în căsuța situată pe linia următoare în stânga sa (deplasare codificată cu
1
), fie în căsuța situată pe linia următoare în dreapta sa (deplasare codificată cu2
); - orice drum va fi descris prin succesiunea deplasărilor efectuate.
De exemplu, drumul ilustrat în figura 2 poate fi descris astfel: 1 2 2 2
.
Cerința
Scrieţi un program care rezolvă următoarele două cerințe:
1. citește descrierea unui drum și afișează numărul la care se termină drumul;
2. citește un număr natural nenul K, determină un drum care se termină cu numărul K pentru care suma numerelor prin care trece drumul este maximă și afișează această sumă.
Date de intrare
Fișierul de intrare numere17.in
conține pe prima linie un număr natural C
reprezentând cerința din problemă care trebuie rezolvată (1 sau 2).
Dacă C
este egal cu 1
, a doua linie din fișier conține un număr natural N
, reprezentând lungimea drumului, iar a treia linie din fișier conţine descrierea drumului sub forma a N
valori, 1
sau 2
, separate între ele prin câte un spațiu.
Dacă C
este egal cu 2
, a doua linie din fișier conține numărul natural K
.
Date de ieșire
Fișierul de ieșire numere17.out
va conține o singură linie pe care va fi scris un singur număr natural. Dacă C=1
, va fi scris numărul cu care se termină drumul descris în fișierul de intrare. Dacă C=2
, va fi scrisă suma maximă a numerelor aflate pe un drum care se termină cu numărul K
.
Restricții și precizări
1 ≤ n ≤ 10000
1 ≤ K ≤ 10001*10002/2
- Pentru rezolvarea corectă a cerinţei 1 se acordă 40 de puncte; pentru rezolvarea corectă a cerinței 2 se acordă 50 de puncte. În concurs s-au acordat 10 puncte din oficiu. Pe site se acordă 10 puncte pentru exemple.
Exemplul 1
numere17.in
1 4 1 2 1 2
numere17.out
13
Explicație
Cerinţa este 1. Drumul descris are lungimea 4
și trece prin numerele 1,2,5,8,13
Exemplul 2
numere17.in
2 9
numere17.out
19
Explicație
Cerinţa este 2. Suma maximă se obține pe drumul care trece prin numerele 1,3,6,9
(1+3+6+9=19
).
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 Numere17:
//Emanuela Cerchez 90 puncte + 10 din oficiu
#include <fstream>
using namespace std;
ifstream fin("numere17.in");
ofstream fout("numere17.out");
int c, n, K, nr, sum;
int main()
{int lin, col, i, j, d, ultim;
fin>>c;
if (c==1)
{
fin>>n;
col=1;
for (i=0; i<n; i++)
{
fin>>d;
col+=d-1;
}
lin=n+1;
nr=lin*(lin-1)/2;//1+2+...lin-1
nr+=col;
fout<<nr<<'\n';
}
else
{
fin>>K;
for (lin=1; K>lin*(lin+1)/2; lin++);
col=K-lin*(lin-1)/2;
sum=ultim=0;
for (i=1; i<=col; i++)
{ultim+=i;
sum+=ultim;}
for (i=col+1; i<=lin; i++)
{
ultim+=i;
sum+=(ultim-(i-col));
}
fout<<sum<<'\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 #2007 Numere17
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2007 Numere17 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!