2745 - Intrebari: Difference between revisions
Robert Manc (talk | contribs) 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... |
Robert Manc (talk | contribs) 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 | ||
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 | ||
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: | ||
suma_cifre(min_val) | |||
print(suma) | print(suma) | ||
else: | else: | ||
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.