2745 - Intrebari: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dau '''nr_elemente''' numere naturale. Dându-se totodată un număr '''p''', apare o intrebare care poate fi de unul dintre următoarele două feluri posibile: care este suma cifrelor valorii minime dintre primele '''p''' ale șirului (tipul '''1''') respectiv, care este numărul de divizori ai valorii maxime dintre primele '''p''' elemente ale șirului (tipul '''2'''). == Date de intrare == Programul citește de la tastatură mai întâi numerele '''nr_ele...
 
No edit summary
 
(One intermediate revision by one other user not shown)
Line 47: Line 47:




def nr_divizori(n):
def nr_divizori(n): #Calculează numărul de divizori ai lui "n" folosind o buclă "for" și o serie de expresii condiționale.
     cnt = 0
     cnt = 0
     for i in range(1, int(math.sqrt(n))+1):
     for i in range(1, int(math.sqrt(n))+1):
Line 54: Line 54:
         if i * i == n:
         if i * i == n:
             cnt -= 1
             cnt -= 1
     return cnt
     print(cnt)




def suma_cifre(min_val):
def suma_cifre(min_val): #Calculează suma cifrelor lui "min_val" folosind o buclă "for"
     suma = 0
     suma = 0
     for i in str(min_val):
     for i in str(min_val):
         suma = suma + min_val % 10
         suma = suma + min_val % 10
         min_val = min_val // 10
         min_val = min_val // 10
     return suma
     print(suma)




Line 74: Line 74:
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         if tip_cerinta == 1:
         if tip_cerinta == 1:
             print(suma_cifre(min_val))
             suma_cifre(min_val)
             print(suma)
             print(suma)
         else:
         else:
             print(nr_divizori(max_val))
             nr_divizori(max_val)
             print(suma)
             print(suma)
     else:
     else:
Line 83: Line 83:


</syntaxhighlight>
</syntaxhighlight>
== Explicație ==
Acest cod definește trei funcții:
: "validare_date" - care primește patru argumente și verifică dacă acestea respectă anumite restricții de valori și tipuri, returnând un flag boolean.
: "nr_divizori" - care primește un număr întreg "n" și calculează numărul său de divizori, afișând rezultatul.
: "suma_cifre" - care primește un număr întreg "min_val" și calculează suma cifrelor sale.
În funcția principală "main", utilizatorul este invitat să introducă trei numere întregi separate prin spațiu: "nr_elemente", "tip_cerinta" și "p", urmate de "nr_elemente" numere întregi separate prin spațiu și reprezentând elementele unei liste "sir".
Înainte de a apela funcțiile "nr_divizori" și "suma_cifre", se verifică dacă datele de intrare sunt valide folosind funcția "validare_date". Dacă datele de intrare sunt valide, se calculează și se afișează rezultatele în funcție de tipul cerinței ("tip_cerinta"). În caz contrar, se afișează un mesaj de eroare.

Latest revision as of 10:38, 25 April 2023

Cerinţa[edit | edit source]

Se dau nr_elemente numere naturale. Dându-se totodată un număr p, apare o intrebare care poate fi de unul dintre următoarele două feluri posibile: care este suma cifrelor valorii minime dintre primele p ale șirului (tipul 1) respectiv, care este numărul de divizori ai valorii maxime dintre primele p elemente ale șirului (tipul 2).

Date de intrare[edit | edit source]

Programul citește de la tastatură mai întâi numerele nr_elemente, tip_cerinta și p iar apoi sir numere naturale (elementele șirului).

Date de ieşire[edit | edit source]

Dacă valoarea tip_cerinta, este 1, programul va afișa pe ecran răspunsul la cerința de tipul 1. Dacă valoarea tip_cerinta, este 2, programul va afișa pe ecran răspunsul la cerința de tipul 2.

Indiferent de tipul cerinței, pe linia următoare se va afișa suma elementelor șirului.

Restricții și precizări[edit | edit source]

  • nr_elemente ∈ Ν
  • 0 ⩽ nr_elemente ⩽ 10
  • cele sir numere citite vor fi naturale nenule și mai mici decât 1.000.000.000
  • numerele șirului sunt numerotate începând cu 1
  • valoarea lui p este cuprinsă între 1 și n, inclusiv
  • 1 ⩽ tip_cerinta ⩽ 2

Exemplu1[edit | edit source]

Intrare
6 1 3
14 13 16 22 15 1
Ieșire
Datele introduse corespund restricțiilor impuse.
4
81

Explicație[edit | edit source]

Este vorba despre o interogare de tipul 1 și minimul dintre primele trei elemente ale șirului este 13 iar suma cifrelor sale este 4.

Exemplu2[edit | edit source]

Intrare
6 2 3
14 13 16 22 15 1
Ieșire
Datele introduse corespund restricțiilor impuse.
5
81

Explicație[edit | edit source]

Este vorba despre o interogare de tipul 2 și maximul dintre primele trei elemente ale șirului este 16 iar numărul său de divizori este 5.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import math


def validare_date(nr_elemente, tip_cerinta, p, sir):

   flag = False
   if 0 <= int(nr_elemente) <= 10 and 1 <= int(tip_cerinta) <= 2 and 1 <= int(p) <= nr_elemente:
       flag = all(isinstance(x, int) and 1 <= x <= 1_000_000_000 for x in sir)
   return flag


def nr_divizori(n): #Calculează numărul de divizori ai lui "n" folosind o buclă "for" și o serie de expresii condiționale.

   cnt = 0
   for i in range(1, int(math.sqrt(n))+1):
       if n % i == 0:
           cnt += 2
       if i * i == n:
           cnt -= 1
   print(cnt)


def suma_cifre(min_val): #Calculează suma cifrelor lui "min_val" folosind o buclă "for"

   suma = 0
   for i in str(min_val):
       suma = suma + min_val % 10
       min_val = min_val // 10
   print(suma)


if __name__ == '__main__':

   nr_elemente, tip_cerinta, p = map(int, input().split())
   sir = list(map(int, input().split()))
   suma = sum(sir)
   min_val = min(sir[:p])
   max_val = max(sir[:p])
   if validare_date(nr_elemente, tip_cerinta, p, sir):
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       if tip_cerinta == 1:
           suma_cifre(min_val)
           print(suma)
       else:
           nr_divizori(max_val)
           print(suma)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>

Explicație[edit | edit source]

Acest cod definește trei funcții:

"validare_date" - care primește patru argumente și verifică dacă acestea respectă anumite restricții de valori și tipuri, returnând un flag boolean.
"nr_divizori" - care primește un număr întreg "n" și calculează numărul său de divizori, afișând rezultatul.
"suma_cifre" - care primește un număr întreg "min_val" și calculează suma cifrelor sale.

În funcția principală "main", utilizatorul este invitat să introducă trei numere întregi separate prin spațiu: "nr_elemente", "tip_cerinta" și "p", urmate de "nr_elemente" numere întregi separate prin spațiu și reprezentând elementele unei liste "sir".

Înainte de a apela funcțiile "nr_divizori" și "suma_cifre", se verifică dacă datele de intrare sunt valide folosind funcția "validare_date". Dacă datele de intrare sunt valide, se calculează și se afișează rezultatele în funcție de tipul cerinței ("tip_cerinta"). În caz contrar, se afișează un mesaj de eroare.