2007 - Numere 7: Difference between revisions
Pagină nouă: Un copil construiește un triunghi cu numerele naturale nenule astfel: * în vârful triunghiului scrie valoarea <code>1</code>; * 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 <code>5</code> linii, conținând numerele naturale de la <code>1</code> la <code>15</code>. În acest triunghi copilul... |
No edit summary |
||
Line 51: | Line 51: | ||
=== Lipește codul aici === | === Lipește codul aici === | ||
1 | <syntaxhighlight lang="python" line="1"> | ||
import sys | |||
sys.stdin = open('numere17.in', 'r') | |||
sys.stdout = open('numere17.out', 'w') | |||
n, c, k, x, cnt, m = 0, 0, 0, 0, 0, 1 | |||
c = int(input()) | |||
if c == 1: | |||
n = int(input()) | |||
for i in range(1, n+1): | |||
x = int(input()) | |||
cnt += 1 | |||
if x == 1: | |||
m += cnt | |||
if x == 2: | |||
m += cnt+1 | |||
print(m) | |||
else: | |||
k = int(input()) | |||
x, s, maxi = 1, 0, 0 | |||
while maxi < k: | |||
maxi = maxi + x | |||
s += maxi | |||
x += 1 | |||
s = s - (maxi - k) * (maxi - k + 1) // 2 | |||
print(s) | |||
</syntaxhighlight> |
Latest revision as of 13:48, 14 December 2023
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
numere17.in
1 4 1 2 1 2
numere17.out
13
Explicație[edit | edit source]
Cerinţa este 1. Drumul descris are lungimea 4
și trece prin numerele 1,2,5,8,13
Încărcare soluție[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python" line="1"> import sys
sys.stdin = open('numere17.in', 'r')
sys.stdout = open('numere17.out', 'w')
n, c, k, x, cnt, m = 0, 0, 0, 0, 0, 1
c = int(input())
if c == 1:
n = int(input())
for i in range(1, n+1):
x = int(input())
cnt += 1
if x == 1:
m += cnt
if x == 2:
m += cnt+1
print(m)
else:
k = int(input())
x, s, maxi = 1, 0, 0
while maxi < k:
maxi = maxi + x
s += maxi
x += 1
s = s - (maxi - k) * (maxi - k + 1) // 2
print(s)
</syntaxhighlight>