1723 - Culegere 1: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
(One intermediate revision by the same user not shown) | |||
Line 42: | Line 42: | ||
return False | return False | ||
return True | return True | ||
def solve(p, n): | |||
# calculate the total number of problems in the first P pages | |||
total_problems = sum(range(1, p+1)) | |||
# calculate the number of pages needed to include problem N | |||
n_page = ((3 + 8 * (n - 1)) ** 0.5 - 1) // 2 + 1 | |||
# calculate the total number of digits used to number all the problems in the collection | |||
total_digits = sum(len(str(i)) for i in range(1, total_problems + 1)) | |||
# print the values of T and M | |||
print(total_digits) | |||
print(int(n_page)) | |||
if __name__ == '__main__': | if __name__ == '__main__': | ||
Line 52: | Line 66: | ||
else: | else: | ||
print("Datele sunt introduse corect.") | print("Datele sunt introduse corect.") | ||
solve(p, n) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Explicatie cod:''' | '''Explicatie cod:''' | ||
Acest cod | Acest cod implementează un algoritm care calculează numărul total de cifre folosite pentru a numerota toate problemele dintr-o carte de probleme și numărul de pagini necesare pentru a include o problemă dată, în funcție de numărul de probleme pe pagină și numărul problemei. Inputul constă din două numere întregi p și n, unde p reprezintă numărul de probleme pe pagină și n este numărul problemei căutate. | ||
Funcția `validate_input` verifică dacă valorile p și n îndeplinesc restricțiile impuse. Dacă acestea nu sunt îndeplinite, se va returna `False`. Dacă valorile sunt corecte, se va returna `True`. | |||
Funcția | Funcția `solve` primește valorile validate și calculează numărul total de probleme în primele p pagini, numărul de pagini necesare pentru a include problema n și numărul total de cifre folosite pentru a numerota toate problemele din carte. Apoi, afișează numărul total de cifre și numărul de pagini necesare. | ||
În secțiunea `__name__ == '__main__'`, se vor citi valorile de la intrare, apoi se vor valida și, dacă valorile sunt corecte, se va apela `solve` pentru a rezolva problema și a afișa rezultatele. Dacă valorile nu sunt corecte, se va afișa mesajul "Datele nu corespund restricțiilor impuse." |
Latest revision as of 08:44, 29 April 2023
Sursa: [1]
Cerinţa[edit | edit source]
O culegere de probleme are P pagini, numerotate de la 1 la P. Problemele din culegere sunt numerotate cu 1,2,3,...,etc, în ordinea apariţiei lor în culegere. Pe prima pagină a culegerii este scrisă o singură problemă (cea cu numărul 1). Pe a doua pagină sunt scrise exact două probleme (cele cu numerele 2 şi 3, în această ordine). Pe cea de-a treia pagină sunt scrise exact trei probleme (cele cu numerele 4, 5 şi 6, în această ordine),…, pe cea de a P-a pagină sunt scrise exact P probleme.
Scrieţi un program care citeşte numerele naturale P şi N şi determină valorile: a) T, numărul total de cifre care au fost utilizate în numerotarea tuturor problemelor din culegere; b) M, numărul minim de pagini pe care ar trebui să le aibă culegerea, astfel încât aceasta să conţină şi problema numerotată cu N.
Date de intrare[edit | edit source]
Programul conţine pe prima linie cele două numere naturale P şi N, separate printr-un spaţiu, cu semnificaţia din enunţ.
Date de ieșire[edit | edit source]
Programul conţine: pe prima linie numărul natural T, cu semnificaţia din enunţ; pe a doua linie numărul natural M, cu semnificaţia din enunţ.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează cerintele de mai sus.
În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări[edit | edit source]
1 ≤ P ≤ 16000 1 ≤ N ≤ 2112600000
Exemplul 1[edit | edit source]
- Datele de intrare
- 5 9
- Datele de ieșire
- Datele sunt introduse corect.
- 21
- 4
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1723
import math
def validate_input(p, n):
if not 1 <= p <= 16000 or not 1 <= n <= 2112600000: return False return True
def solve(p, n):
# calculate the total number of problems in the first P pages total_problems = sum(range(1, p+1))
# calculate the number of pages needed to include problem N n_page = ((3 + 8 * (n - 1)) ** 0.5 - 1) // 2 + 1
# calculate the total number of digits used to number all the problems in the collection total_digits = sum(len(str(i)) for i in range(1, total_problems + 1))
# print the values of T and M print(total_digits) print(int(n_page))
if __name__ == '__main__':
# read input values p, n = map(int, input().split())
# validate input values if not validate_input(p, n): print("Datele nu corespund restricțiilor impuse.") else: print("Datele sunt introduse corect.") solve(p, n)
</syntaxhighlight>
Explicatie cod:
Acest cod implementează un algoritm care calculează numărul total de cifre folosite pentru a numerota toate problemele dintr-o carte de probleme și numărul de pagini necesare pentru a include o problemă dată, în funcție de numărul de probleme pe pagină și numărul problemei. Inputul constă din două numere întregi p și n, unde p reprezintă numărul de probleme pe pagină și n este numărul problemei căutate.
Funcția `validate_input` verifică dacă valorile p și n îndeplinesc restricțiile impuse. Dacă acestea nu sunt îndeplinite, se va returna `False`. Dacă valorile sunt corecte, se va returna `True`.
Funcția `solve` primește valorile validate și calculează numărul total de probleme în primele p pagini, numărul de pagini necesare pentru a include problema n și numărul total de cifre folosite pentru a numerota toate problemele din carte. Apoi, afișează numărul total de cifre și numărul de pagini necesare.
În secțiunea `__name__ == '__main__'`, se vor citi valorile de la intrare, apoi se vor valida și, dacă valorile sunt corecte, se va apela `solve` pentru a rezolva problema și a afișa rezultatele. Dacă valorile nu sunt corecte, se va afișa mesajul "Datele nu corespund restricțiilor impuse."