1723 - Culegere 1: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
(8 intermediate revisions by the same user not shown) | |||
Line 16: | Line 16: | ||
pe a doua linie numărul natural '''M''', cu semnificaţia din enunţ. | pe a doua linie numărul natural '''M''', cu semnificaţia din enunţ. | ||
Dacă datele sunt introduse corect, | 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.".''' | Î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 == | == Restricţii şi precizări == | ||
1 ≤ '''P''' ≤ 16000 | |||
1 ≤ '''N''' ≤ 2112600000 | |||
== Exemplul 1 == | == Exemplul 1 == | ||
; | ; Datele de intrare | ||
: 5 9 | |||
; Datele de ieșire | |||
: Datele sunt introduse corect. | |||
: 21 | |||
: 4 | : 4 | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <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 | 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__': | ||
n = int( | # read input values | ||
if not | p, n = map(int, input().split()) | ||
print("Datele | |||
# validate input values | |||
if not validate_input(p, n): | |||
print("Datele nu corespund restricțiilor impuse.") | |||
else: | else: | ||
print("Datele sunt introduse corect.") | |||
solve(p, n) | |||
print("Datele introduse | |||
</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." |
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."