1295 - Cif Pagini: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
(9 intermediate revisions by the same user not shown) | |||
Line 17: | Line 17: | ||
Dacă v=2, programul va conține numărul '''np''', reprezentând numărul total de cifre folosite pentru numerotarea paginilor celor '''n''' volume. | Dacă v=2, programul va conține numărul '''np''', reprezentând numărul total de cifre folosite pentru numerotarea paginilor celor '''n''' volume. | ||
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ă a) numărul total de pagini b) numărul total de cifre folosite pentru numerotarea paginilor celor n volume. | ||
În | În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse." | ||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
Line 31: | Line 31: | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; | ; Datele de intrare: | ||
: 3 103 1 | : 3 103 1 | ||
; | ; Datele de ieșire: | ||
: Datele sunt introduse corect. | |||
: 319 | : 319 | ||
<br> | <br> | ||
== Exemplul 2 == | == Exemplul 2 == | ||
; | ; Datele de intrare: | ||
: Introdu cele trei numere: | |||
: 3 103 2 | : 3 103 2 | ||
; | ; Datele de ieșire: | ||
: | : Datele sunt introduse corect. | ||
: 9 | |||
<br> | <br> | ||
Line 87: | Line 91: | ||
return total_digits | return total_digits | ||
n, p, v = map(int, input("Introdu cele trei numere:").split()) | def validate_input(n, p, v): | ||
total = calculate_total(n, p, v) | """ | ||
print(total) | Verifică dacă datele introduse sunt corecte. | ||
""" | |||
if n <= 0 or p <= 0 or v not in [1, 2]: | |||
print( "Datele nu corespund restricțiilor impuse.") | |||
return False | |||
return True | |||
if __name__ == '__main__': | |||
n, p, v = map(int, input("Introdu cele trei numere:").split()) | |||
if validate_input(n, p, v): | |||
print("Datele sunt corecte") | |||
total = calculate_total(n, p, v) | |||
print(total) | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 06:56, 27 April 2023
Sursa: [1]
Cerinţa[edit | edit source]
Într-o bibliotecă se află o carte cu o proprietate mai ciudată. Este alcătuită din n volume, și pentru fiecare fiecare volum numărul de pagini este număr prim. Mai mult, numerele paginilor volumelor sunt numere prime consecutive.
Se dau numerele n p v reprezentând numărul de volume ale cărții, numărul de pagini ale primului volum și numărul cerinței care trebuie rezolvate. Să se afle:
a) numărul total de pagini;
b) numărul total de cifre folosite pentru numerotarea paginilor celor n volume.
Date de intrare[edit | edit source]
Programul conține pe prima linie numerele n p v reprezentând numărul de volume ale unei cărți, numărul de pagini ale primului volum și respectiv numărul cerinței.
Date de ieșire[edit | edit source]
Dacă v=1, programul va conține numărul nt , reprezentând numărul total de pagini.
Dacă v=2, programul va conține numărul np, reprezentând numărul total de cifre folosite pentru numerotarea paginilor celor n volume.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează a) numărul total de pagini b) numărul total de cifre folosite pentru numerotarea paginilor celor n volume.
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
Restricţii şi precizări[edit | edit source]
1 ≤ n ≤ 1000
1 ≤ p < 50.000
v poate fi doar 1 sau 2;
Paginile volumelor se numerotează de la 1 la numărul total de pagini; dacă primul volum are k pagini, atunci volumul al doilea se va numerota cu k+1, ș.a.m.d.
Exemplul 1[edit | edit source]
- Datele de intrare
- 3 103 1
- Datele de ieșire
- Datele sunt introduse corect.
- 319
Exemplul 2[edit | edit source]
- Datele de intrare
- Introdu cele trei numere:
- 3 103 2
- Datele de ieșire
- Datele sunt introduse corect.
- 9
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1295
def is_prime(n):
""" Verifică dacă un număr este prim sau nu. """ if n <= 1: return False for i in range(2, int(n**0.5)+1): if n % i == 0: return False return True
def num_digits(n):
""" Numără numărul de cifre dintr-un număr. """ return len(str(n))
def find_consecutive_primes(n, p):
""" Găsește primele n numere prime consecutive după p. """ pages = [] num = p while len(pages) < n: if is_prime(num): pages.append(num) num += 1 return pages
def calculate_total(n, p, v):
""" Calculează numărul total de pagini sau cifre. """ pages = find_consecutive_primes(n, p) if v == 1: total_pages = sum(pages) return total_pages elif v == 2: total_digits = sum(num_digits(p) for p in pages) return total_digits
def validate_input(n, p, v):
""" Verifică dacă datele introduse sunt corecte. """ if n <= 0 or p <= 0 or v not in [1, 2]: print( "Datele nu corespund restricțiilor impuse.") return False return True
if __name__ == '__main__':
n, p, v = map(int, input("Introdu cele trei numere:").split()) if validate_input(n, p, v): print("Datele sunt corecte") total = calculate_total(n, p, v) print(total)
</syntaxhighlight>
Explicatie cod:
Acest cod definește trei funcții și le folosește pentru a calcula numărul total de pagini sau cifre într-un set de cărți.
Funcția is_prime(n) primește un număr întreg n și returnează True dacă este prim și False în caz contrar. Această funcție utilizează un algoritm de determinare a primelor, parcurgând toate numerele de la 2 la radicalul pătrat al lui n și verificând dacă n este divizibil cu vreunul dintre acestea.
Funcția num_digits(n) primește un număr întreg n și returnează numărul de cifre din n. Pentru a face acest lucru, funcția transformă întregul într-un șir de caractere utilizând str(n) și returnează lungimea acestuia utilizând len().
Funcția find_consecutive_primes(n, p) primește doi parametri întregi, n și p, și găsește primele n numere prime consecutive începând cu p. Această funcție utilizează funcția is_prime() pentru a verifica dacă fiecare număr este prim și adaugă numerele prime găsite într-o listă până când lungimea listei este egală cu n.
Funcția calculate_total(n, p, v) primește trei parametri întregi, n, p și v, și calculează numărul total de pagini sau cifre, în funcție de valoarea lui v. Această funcție utilizează funcția find_consecutive_primes() pentru a găsi numerele prime și returnează suma lor dacă v este 1 sau suma numărului de cifre ale acestora dacă v este 2.
În cele din urmă, codul citește trei numere întregi de la tastatură și apelează funcția calculate_total() cu acestea pentru a calcula numărul total de pagini sau cifre, în funcție de valoarea celui de-al treilea număr. Rezultatul este apoi afișat utilizând print().