1723 - Culegere 1: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(3 intermediate revisions by the same user not shown)
Line 25: Line 25:


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: 5 9
: 5 9
; Datele de ieșire
: Datele sunt introduse corect.
: 21
: 21
: 4
: 4
Line 40: 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 50: Line 66:
     else:
     else:
         print("Datele sunt introduse corect.")
         print("Datele sunt introduse corect.")
         # calculate the total number of problems in the first P pages
         solve(p, n)
        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))
</syntaxhighlight>
</syntaxhighlight>


'''Explicatie cod:'''
'''Explicatie cod:'''


Acest cod are două funcții principale: validate_input() și main().
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 validate_input() verifică dacă valorile primite ca parametri sunt în intervalul specificat de probleme. Dacă valoarea nu este validă, funcția returnează False, altfel returnează 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.


Funcția main() citește valorile de intrare, verifică dacă sunt valide prin apelul funcției validate_input(). Dacă valorile sunt invalide, se afișează un mesaj de eroare. În caz contrar, se 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 numerotarea tuturor problemelor din colecție. La final, aceste valori sunt afișate pe ecran.
Î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>

  1. 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."