3285 - Mos Craciun: Difference between revisions
MiclausIoana (talk | contribs) Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/3285/moscraciun] == Cerință == Cei '''n''' copii de la grădiniță stau cuminți în șir și așteaptă cadourile de la Moș Crăciun. Ei sunt numerotați de la 1 la '''n''' (se consideră că '''n''' este par) și în prima jumătate sunt copiii de la grupa mare iar în a doua jumătate sunt cei de la grupa mică (numărul de copii din fiecare grupă este același, '''n/2'''). După ce trece Moș Crăciun se știe câte cadouri a p... |
Andor Giulia (talk | contribs) No edit summary |
||
Line 5: | Line 5: | ||
Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații, reprezentând, în ordine, numărul de cadouri ale fiecărui copil. | Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații, reprezentând, în ordine, numărul de cadouri ale fiecărui copil. | ||
== Date de ieșire == | == Date de ieșire == | ||
Programul va afișa pe ecran numărul '''c''', valoarea cerută. | Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.".Programul va afișa pe ecran numărul '''c''', valoarea cerută. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.". | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* '''2 ≤ n ≤ 20''', par | * '''2 ≤ n ≤ 20''', par | ||
* cele '''n''' numere citite vor fi naturale nenule mai mici decât '''1.000.000.000''' | * cele '''n''' numere citite vor fi naturale nenule mai mici decât '''1.000.000.000''' | ||
== Exemplu == | == Exemple == | ||
=== Exemplu 1 === | |||
; Intrare | ; Intrare | ||
: 6 | : 6 | ||
Line 15: | Line 16: | ||
; Ieșire | ; Ieșire | ||
: 1 | : 1 | ||
=== Exemplu 2 === | |||
; Intrare | |||
: 1 | |||
: 1 5 3 8 | |||
; Ieșire | |||
: Datele nu sunt comform restricțiilor impuse | |||
=== Exemplu 3 === | |||
; Intrare | |||
: 21 | |||
: 1 6 3 6 8 2 5 6 2 3 4 2 1 5 3 2 1 5 3 6 4 | |||
; Ieșire | |||
: Datele nu sunt comform restricțiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line="1"> | <syntaxhighlight lang="python" line="1"> | ||
n = int(input()) | def citeste_n(): | ||
maxi = 0 | while True: | ||
k = 0 | try: | ||
n = int(input("Introduceti numarul de valori: ")) | |||
if n >= 2 and n <= 20: | |||
print("Datele sunt corecte.") | |||
return n | |||
else: | |||
print("Datele nu sunt conform restricțiilor impuse.") | |||
except ValueError: | |||
print("Trebuie introduse doar numere intregi.") | |||
def citeste_valori(n): | |||
valori = [] | |||
for i in range(n): | |||
while True: | |||
try: | |||
valoare = int(input("Introduceti o valoare: ")) | |||
if valoare <= 1000000000: | |||
print("Datele sunt corecte.") | |||
valori.append(valoare) | |||
break | |||
else: | |||
print("Datele nu sunt conform restricțiilor impuse.") | |||
except ValueError: | |||
print("Trebuie introduse doar valori numerice.") | |||
return valori | |||
def cadouri(valori): | |||
maxi = 0 | |||
k = 0 | |||
for i in range(1, len(valori) // 2 + 1): | |||
if valori[i - 1] > maxi: | |||
maxi = valori[i - 1] | |||
for i in range( | for i in range(len(valori) // 2 + 1, len(valori) + 1): | ||
if valori[i - 1] > maxi: | |||
k += 1 | |||
return k | |||
print("Numarul de copii este :",k) | if __name__ == '__main__': | ||
n = citeste_n() | |||
valori = citeste_valori(n) | |||
k = cadouri(valori) | |||
print("Numarul de copii este:", k) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicații == | |||
citeste_n(): Această funcție citește de la tastatură numărul de valori pe care utilizatorul dorește să le introducă și verifică dacă acestea respectă restricțiile impuse (între 2 și 20). În caz contrar, utilizatorul este notificat că datele nu sunt conform restricțiilor și i se cere să introducă din nou un număr corect. | |||
citeste_valori(n): Această funcție primește ca parametru numărul de valori introduse de utilizator și citește aceste valori de la tastatură, verificând dacă acestea sunt valori numerice și respectă restricțiile impuse (mai mici sau egale cu 1 miliard). În caz contrar, utilizatorul este notificat că datele nu sunt conform restricțiilor și i se cere să introducă din nou valori corecte. | |||
cadouri(valori): Această funcție primește ca parametru lista de valori introduse de utilizator și calculează numărul de copii care vor primi cadouri în funcție de restricția dată: copiii vor primi cadouri de la jumătatea listei în sus numai dacă valoarea cadoului este mai mare decât orice valoare anterioară. Dacă valoarea maximă se găsește în prima jumătate a listei, atunci niciun copil nu va primi cadouri. Funcția returnează numărul de copii care primesc cadouri. | |||
În funcția cadouri(valori), prima buclă for calculează valoarea maximă din prima jumătate a listei, iar cea de-a doua buclă for numără câți copii primesc cadouri în a doua jumătate a listei. Funcția returnează valoarea acestui număr, care este apoi afișată pe ecran în funcția main(). |
Latest revision as of 15:00, 30 March 2023
Sursă: [1]
Cerință[edit | edit source]
Cei n copii de la grădiniță stau cuminți în șir și așteaptă cadourile de la Moș Crăciun. Ei sunt numerotați de la 1 la n (se consideră că n este par) și în prima jumătate sunt copiii de la grupa mare iar în a doua jumătate sunt cei de la grupa mică (numărul de copii din fiecare grupă este același, n/2). După ce trece Moș Crăciun se știe câte cadouri a primit fiecare copil și noi dorim să aflăm câți copii din grupa mică au primit mai multe cadouri decât orice copil din grupa mare.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații, reprezentând, în ordine, numărul de cadouri ale fiecărui copil.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.".Programul va afișa pe ecran numărul c, valoarea cerută. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".
Restricții și precizări[edit | edit source]
- 2 ≤ n ≤ 20, par
- cele n numere citite vor fi naturale nenule mai mici decât 1.000.000.000
Exemple[edit | edit source]
Exemplu 1[edit | edit source]
- Intrare
- 6
- 1 6 3 6 8 2
- Ieșire
- 1
Exemplu 2[edit | edit source]
- Intrare
- 1
- 1 5 3 8
- Ieșire
- Datele nu sunt comform restricțiilor impuse
Exemplu 3[edit | edit source]
- Intrare
- 21
- 1 6 3 6 8 2 5 6 2 3 4 2 1 5 3 2 1 5 3 6 4
- Ieșire
- Datele nu sunt comform restricțiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1"> def citeste_n():
while True: try: n = int(input("Introduceti numarul de valori: ")) if n >= 2 and n <= 20: print("Datele sunt corecte.") return n else: print("Datele nu sunt conform restricțiilor impuse.") except ValueError: print("Trebuie introduse doar numere intregi.")
def citeste_valori(n):
valori = [] for i in range(n): while True: try: valoare = int(input("Introduceti o valoare: ")) if valoare <= 1000000000: print("Datele sunt corecte.") valori.append(valoare) break else: print("Datele nu sunt conform restricțiilor impuse.") except ValueError: print("Trebuie introduse doar valori numerice.") return valori
def cadouri(valori):
maxi = 0 k = 0 for i in range(1, len(valori) // 2 + 1): if valori[i - 1] > maxi: maxi = valori[i - 1]
for i in range(len(valori) // 2 + 1, len(valori) + 1): if valori[i - 1] > maxi: k += 1 return k
if __name__ == '__main__':
n = citeste_n() valori = citeste_valori(n) k = cadouri(valori) print("Numarul de copii este:", k)
</syntaxhighlight>
Explicații[edit | edit source]
citeste_n(): Această funcție citește de la tastatură numărul de valori pe care utilizatorul dorește să le introducă și verifică dacă acestea respectă restricțiile impuse (între 2 și 20). În caz contrar, utilizatorul este notificat că datele nu sunt conform restricțiilor și i se cere să introducă din nou un număr corect.
citeste_valori(n): Această funcție primește ca parametru numărul de valori introduse de utilizator și citește aceste valori de la tastatură, verificând dacă acestea sunt valori numerice și respectă restricțiile impuse (mai mici sau egale cu 1 miliard). În caz contrar, utilizatorul este notificat că datele nu sunt conform restricțiilor și i se cere să introducă din nou valori corecte.
cadouri(valori): Această funcție primește ca parametru lista de valori introduse de utilizator și calculează numărul de copii care vor primi cadouri în funcție de restricția dată: copiii vor primi cadouri de la jumătatea listei în sus numai dacă valoarea cadoului este mai mare decât orice valoare anterioară. Dacă valoarea maximă se găsește în prima jumătate a listei, atunci niciun copil nu va primi cadouri. Funcția returnează numărul de copii care primesc cadouri.
În funcția cadouri(valori), prima buclă for calculează valoarea maximă din prima jumătate a listei, iar cea de-a doua buclă for numără câți copii primesc cadouri în a doua jumătate a listei. Funcția returnează valoarea acestui număr, care este apoi afișată pe ecran în funcția main().