1422 - Ograda: Difference between revisions
Diana Butuza (talk | contribs) |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 27: | Line 27: | ||
: 5 16 | : 5 16 | ||
; ograda.out | ; ograda.out | ||
: Datele introduse | : Datele sunt introduse corect. | ||
: 2 3 | : 2 3 | ||
== Explicație == | == Explicație == | ||
Cerința este '''1'''. În ogradă sunt '''2''' găini și '''3''' văcuțe. | Cerința este '''1'''. În ogradă sunt '''2''' găini și '''3''' văcuțe. | ||
== | == Exemplul 2 == | ||
; ograda.in | ; ograda.in | ||
: 2 | : 2 | ||
: 5 16 | : 5 16 | ||
; ograda.out | ; ograda.out | ||
: Datele introduse | : Datele sunt introduse corect. | ||
: 2 5 | : 2 5 | ||
Latest revision as of 10:54, 25 April 2023
Enunţ[edit | edit source]
În ograda lui Gigel se găsesc găini și văcuțe. Se dau două numere naturale: C – numărul de capete și P – numărul de picioare din curte.
Cerinţa[edit | edit source]
1. Să se afișeze câte găini și câte văcuțe sunt în ograda lui Gigel. 2. Maria, colega lui Gigel, îl provoacă pe acesta să calculeze numărul de divizori impari pentru numărul C și numărul de divizori pari pentru numărul P. Deoarece Gigel nu este bun la matematică, vă cere ajutorul. Să se afișeze cele două numere calculate
Date de intrare[edit | edit source]
Fișierul de intrare ograda.in conține pe prima linie un număr natural X (1 sau 2) reprezentând numărul cerinței ce trebuie rezolvată.
A doua linie conține două numere C și P, separate printr-un spațiu, cu semnificațiile din cerință.
Date de ieşire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa:"Datele sunt introduse corect.", apoi pe urmatorul rand fișierul de ieșire ograda.out va conține: Pentru cerința 1: pe prima linie se vor afișa două numere, separate printr-un spațiu, G și V reprezentând numărul de găini, respectiv numărul de văcuțe din ogradă. Pentru cerința 2: pe prima linie se vor afişa două numere, separate printr-un spațiu, reprezentând numărul de divizori impari pentru numărul C și numărul de divizori pari pentru numărul P. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
Restricții și precizări[edit | edit source]
- C și P ∈ Ν , 2*C ⩽ P ⩽ 4*C, iar P este un număr par.
- Pentru cerința 1:C,P ⩽ 200000000000
- Pentru cerința 2: C, P ⩽50000000
- 0 ⩽ numar1 ⩽ numar2 ⩽ 1.000.000.000
- Se consideră că toate găinile au 2 picioare și 1 cap, iar toate văcuțele au 4 picioare și 1 cap. Gigel nu se
- află în ogradă în momentul numărării capetelor și picioarelor.
- Pentru X = 1 se va rezolva doar cerința 1. Pentru X = 2 se va rezolva doar cerința 2.
- d este divizorul lui a dacă restul împărţirii lui a la d este 0.
Exemplul 1[edit | edit source]
- ograda.in
- 1
- 5 16
- ograda.out
- Datele sunt introduse corect.
- 2 3
Explicație[edit | edit source]
Cerința este 1. În ogradă sunt 2 găini și 3 văcuțe.
Exemplul 2[edit | edit source]
- ograda.in
- 2
- 5 16
- ograda.out
- Datele sunt introduse corect.
- 2 5
Explicație[edit | edit source]
Cerința este 2. Numărul 5 are 2 divizori impari (1 și 5), iar numărul 16 are 4 divizori pari (2, 4, 8, 16).
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Verificăm dacă toate valorile de intrare respectă restricțiile
def validare_date(C, P, X):
if not (isinstance(C, int) and isinstance(P, int) and isinstance(X, int)): return False
if not (0 < C <= 200000000000 and 0 < P <= 200000000000): if X == 1: return False elif not (0 < C <= 50000000 and 0 < P <= 50000000): return False
if not (2 * C <= P <= 4 * C and P % 2 == 0): return False
return True
if __name__ == "__main__":
# Citire date de intrare with open("ograda.in", "r") as f: X = int(f.readline()) C, P = map(int, f.readline().split())
# Verificare validare date if validare_date(C, P, X): with open("ograda.out", "w") as f_out: f_out.write("Datele sunt introduse corect.\n")
# Rezolvare cerinta 1 if X == 1: # Numarul total de capete t = C # Numarul total de picioare l = P # Numarul de gaini (cu 2 picioare si 1 cap) g = (4*t - l) // 2 # Numarul de vacute (cu 4 picioare si 1 cap) v = t - g # Afisare rezultat with open("ograda.out", "a") as f_out: f_out.write(str(g) + " " + str(v))
# Rezolvare cerinta 2 elif X == 2: # Numarul de divizori impari pentru numarul C d1 = 1 for i in range(3, C+1, 2): if C % i == 0: d1 += 1 # Numarul de divizori pari pentru numarul P d2 = 1 for i in range(2, P+1, 2): if P % i == 0: d2 += 1 # Afisare rezultat with open("ograda.out", "a") as f_out: f_out.write(str(d1) + " " + str(d2)) else: with open("ograda.out", "w") as f_out: f_out.write("Datele nu corespund restricțiilor impuse.")
</syntaxhighlight>