1723 - Culegere 1: Difference between revisions

From Bitnami MediaWiki
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, programul va rula.
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 ==
* 0 < '''n''' ⩽ 10
1 ≤ '''P''' ≤ 16000
1 ≤ '''N''' ≤ 2112600000


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: 5 9
; Datele de ieșire
: Datele sunt introduse corect.
: 21
: 4
: 4
; Ieșire
: Datele corespund cerințelor.
: 576
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#1723
def patrate_perfecte(n):
import math
    patrate = []
    i = 1
    while len(patrate) < n:
        patrat = i * i
        patrate.append(patrat)
        i += 1
    return patrate


def validate_input(p, n):
    if not 1 <= p <= 16000 or not 1 <= n <= 2112600000:
        return False
    return True


def calculeaza(numbers):
def solve(p, n):
     product = 1
     # calculate the total number of problems in the first P pages
    for number in numbers:
    total_problems = sum(range(1, p+1))
        product *= number
    return product


    # calculate the number of pages needed to include problem N
    n_page = ((3 + 8 * (n - 1)) ** 0.5 - 1) // 2 + 1


def validare_numar(n):
    # calculate the total number of digits used to number all the problems in the collection
    if n < 1 or n > 10:
    total_digits = sum(len(str(i)) for i in range(1, total_problems + 1))
        return False
    return True


    # print the values of T and M
    print(total_digits)
    print(int(n_page))


if __name__ == '__main__':
if __name__ == '__main__':
     n = int(input("Introduceți numărul n: "))
     # read input values
     if not validare_numar(n):
    p, n = map(int, input().split())
         print("Datele introduse nu corespund cerintelor.")
 
    # validate input values
     if not validate_input(p, n):
         print("Datele nu corespund restricțiilor impuse.")
     else:
     else:
        squares = patrate_perfecte(n)
         print("Datele sunt introduse corect.")
        product = calculeaza(squares)
         solve(p, n)
         print("Datele introduse corespund cerintelor.")
         print(product)


</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`.


</syntaxhighlight>
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>

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