2448 - Pătrate3: Difference between revisions
Dragos1234 (talk | contribs) Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/1473/grupapregatitoare] == Cerinţa == Cei n elevi de la grupa pregătitoare au primit câte două cartonaşe, fiecare cartonaş având scris pe el un număr natural. Ei s-au aşezat în cerc şi, la un semnal dat, fiecare a scos la întâmplare un cartonaş din buzunar. Copiii vă roagă să răspundeţi la următoarele întrebări: 1. Care poate fi suma maximă S a numerelor de pe cartonaşele scoase, ştiind că produsul acestora este... |
Dragos1234 (talk | contribs) |
||
(26 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Sursa: [https://www.pbinfo.ro/probleme/ | Sursa: [https://www.pbinfo.ro/probleme/2448/patrate3] | ||
== Cerinţa == | == Cerinţa == | ||
Scrieţi un program care rezolvă următoarele două cerinţe: | |||
1. | |||
2. | 1. Citește un număr natural M și determină numărul K de valori conținute de pătratul numerotat cu M; | ||
2. Citește un număr natural N și determină numărul T al pătratului care conține numărul N pe una dintre laturi. | |||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare ''' | Fișierul de intrare '''patrate3.in''' conține pe prima linie un număr natural C reprezentând cerința din problemă care trebuie rezolvată (1 sau 2). Dacă C = 1, atunci fişierul conține pe a doua linie numărul natural M. Dacă C = 2, atunci fișierul conține pe a doua linie numărul natural N. | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă C = 1, atunci fişierul de ieşire '''patrate3.out''' conţine pe prima linie numărul K, reprezentând răspunsul la cerința 1 a problemei si mesajul "Datele introduse corespund cerintelor". Dacă C = 2, atunci fişierul de ieşire '''patrate3.out''' conţine pe prima linie numărul natural T, reprezentând răspunsul la cerinţa 2 și mesajul "Datele introduse corespund cerințelor." În caz contrar programul v-a afișa mesajul "Datele introduse nu corespund cenrintelor" și se va inceta executia programului. | |||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
* | * 1 ⩽ '''M''' ⩽ 260.000.000 | ||
* | * 1 ⩽ '''N''' ⩽ 2.147.302.920 | ||
* | * Numerele N, M, T și K sunt numere naturale | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
: '' | : ''patrate3.in'' | ||
: 3 | : 1 3 | ||
; Ieșire | ; Ieșire | ||
: '' | : Datele introduse corespund cerințelor | ||
: | : ''patrate3.out'' | ||
: 24 | |||
<br> | <br> | ||
== Exemplul 2 == | == Exemplul 2 == | ||
; Intrare | ; Intrare | ||
: '' | : ''patrate3.in'' | ||
: | : 0 0 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse nu corespund cerințelor | |||
: Datele introduse nu corespund | |||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | #2448 | ||
def | import math | ||
if not (1 <= | |||
def validate_input(m, n): | |||
if not (1 <= | if not (1 <= m <= 260000000): | ||
return False | |||
if not (1 <= n <= 2147302920): | |||
return False | |||
# Verifică că M și N sunt numere naturale | |||
if not isinstance(m, int) or not isinstance(n, int): | |||
return False | |||
# Verifică că nu există două pătrate cu același număr de valori scrise pe laturi | |||
num_values = [m, n] | |||
for i in range(2): | |||
count = num_values.count(num_values[i]) | |||
if count > 1: | |||
return False | |||
return True | return True | ||
def | def read_input(): | ||
with open("patrate3.in", "r") as f: | |||
cer, n = map(int, f.readline().split()) | |||
return cer, n | |||
def write_output(output): | |||
with open("patrate3.out", "w") as f: | |||
f.write(str(output)) | |||
def | def solve(cer, n): | ||
n | if cer == 1: | ||
return 8 * n | |||
else: | |||
m = int(math.sqrt(n)) | |||
if m % 2 == 1: | |||
return (m + 1) // 2 | |||
else: | |||
return m // 2 | |||
if | if __name__ == '__main__': | ||
print(" | cer, n = read_input() | ||
if not validate_input(cer, n): | |||
print("Datele introduse nu corespund cerintelor.") | |||
else: | else: | ||
print("Datele introduse corespund cerintelor.") | print("Datele introduse corespund cerintelor.") | ||
output = solve(cer, n) | |||
write_output(output) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicatie rezolvare == | == Explicatie rezolvare == | ||
Acest program citește date de intrare dintr-un fișier numit '''patrate3.in''', validează datele de intrare conform unor criterii prestabilite, rezolvă problema specifică (calculând o valoare pentru variabila output) și afișează rezultatul final într-un fișier numit '''patrate3.out'''. | |||
Funcția '''validate_input(m, n)''' verifică dacă m și n îndeplinesc anumite condiții și returnează True dacă sunt valide, sau False în caz contrar. | |||
Funcția '''read_input()''' deschide fișierul '''patrate3.in''', citește primul număr (cer) și al doilea număr (n) din prima linie, apoi le returnează sub formă de tuplu. | |||
Funcția '''write_output(output)''' deschide fișierul "patrate3.out" și scrie valoarea output în el. | |||
Funcția '''solve(cer, n)''' primește cer și n și returnează o valoare specifică în funcție de valoarea lui cer și n. | |||
În secțiunea main, programul citește datele de intrare, verifică dacă sunt valide prin apelul funcției '''validate_input''', apoi rezolvă problema și afișează rezultatul final dacă datele de intrare sunt valide. |
Latest revision as of 18:24, 12 May 2023
Sursa: [1]
Cerinţa[edit | edit source]
Scrieţi un program care rezolvă următoarele două cerinţe:
1. Citește un număr natural M și determină numărul K de valori conținute de pătratul numerotat cu M;
2. Citește un număr natural N și determină numărul T al pătratului care conține numărul N pe una dintre laturi.
Date de intrare[edit | edit source]
Fișierul de intrare patrate3.in conține pe prima linie un număr natural C reprezentând cerința din problemă care trebuie rezolvată (1 sau 2). Dacă C = 1, atunci fişierul conține pe a doua linie numărul natural M. Dacă C = 2, atunci fișierul conține pe a doua linie numărul natural N.
Date de ieșire[edit | edit source]
Dacă C = 1, atunci fişierul de ieşire patrate3.out conţine pe prima linie numărul K, reprezentând răspunsul la cerința 1 a problemei si mesajul "Datele introduse corespund cerintelor". Dacă C = 2, atunci fişierul de ieşire patrate3.out conţine pe prima linie numărul natural T, reprezentând răspunsul la cerinţa 2 și mesajul "Datele introduse corespund cerințelor." În caz contrar programul v-a afișa mesajul "Datele introduse nu corespund cenrintelor" și se va inceta executia programului.
Restricţii şi precizări[edit | edit source]
- 1 ⩽ M ⩽ 260.000.000
- 1 ⩽ N ⩽ 2.147.302.920
- Numerele N, M, T și K sunt numere naturale
Exemplul 1[edit | edit source]
- Intrare
- patrate3.in
- 1 3
- Ieșire
- Datele introduse corespund cerințelor
- patrate3.out
- 24
Exemplul 2[edit | edit source]
- Intrare
- patrate3.in
- 0 0
- Ieșire
- Datele introduse nu corespund cerințelor
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 2448
import math
def validate_input(m, n):
if not (1 <= m <= 260000000): return False if not (1 <= n <= 2147302920): return False # Verifică că M și N sunt numere naturale if not isinstance(m, int) or not isinstance(n, int): return False # Verifică că nu există două pătrate cu același număr de valori scrise pe laturi num_values = [m, n] for i in range(2): count = num_values.count(num_values[i]) if count > 1: return False return True
def read_input():
with open("patrate3.in", "r") as f: cer, n = map(int, f.readline().split()) return cer, n
def write_output(output):
with open("patrate3.out", "w") as f: f.write(str(output))
def solve(cer, n):
if cer == 1: return 8 * n else: m = int(math.sqrt(n)) if m % 2 == 1: return (m + 1) // 2 else: return m // 2
if __name__ == '__main__':
cer, n = read_input() if not validate_input(cer, n): print("Datele introduse nu corespund cerintelor.") else: print("Datele introduse corespund cerintelor.") output = solve(cer, n) write_output(output)
</syntaxhighlight>
Explicatie rezolvare[edit | edit source]
Acest program citește date de intrare dintr-un fișier numit patrate3.in, validează datele de intrare conform unor criterii prestabilite, rezolvă problema specifică (calculând o valoare pentru variabila output) și afișează rezultatul final într-un fișier numit patrate3.out.
Funcția validate_input(m, n) verifică dacă m și n îndeplinesc anumite condiții și returnează True dacă sunt valide, sau False în caz contrar.
Funcția read_input() deschide fișierul patrate3.in, citește primul număr (cer) și al doilea număr (n) din prima linie, apoi le returnează sub formă de tuplu.
Funcția write_output(output) deschide fișierul "patrate3.out" și scrie valoarea output în el.
Funcția solve(cer, n) primește cer și n și returnează o valoare specifică în funcție de valoarea lui cer și n.
În secțiunea main, programul citește datele de intrare, verifică dacă sunt valide prin apelul funcției validate_input, apoi rezolvă problema și afișează rezultatul final dacă datele de intrare sunt valide.