1295 - Cif Pagini: Difference between revisions

From Bitnami MediaWiki
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, 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ă  a) numărul total de pagini b) numărul total de cifre folosite pentru numerotarea paginilor celor n volume.


În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: ''' "Datele nu corespund restricțiilor impuse.".'''
Î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 ==
; Intrare
; Datele de intrare:
: 3 103 1
: 3 103 1
; Ieșire
; Datele de ieșire:
: Datele sunt introduse corect.
: 319
: 319
<br>
<br>
== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Datele de intrare:
: Introdu cele trei numere:
: 3 103 2
: 3 103 2
; Ieșire
; Datele de ieșire:
: 849
: 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>

  1. 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().