2448 - Pătrate3
Sursa: [1]
Cerinţa
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
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
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
- 1 ⩽ M ⩽ 260.000.000
- 1 ⩽ N ⩽ 2.147.302.920
- Numerele N, M, T și K sunt numere naturale
Exemplul 1
- Intrare
- patrate3.in
- 1 3
- Ieșire
- Datele introduse corespund cerințelor
- patrate3.out
- 24
Exemplul 2
- Intrare
- patrate3.in
- 0 0
- Ieșire
- Datele introduse nu corespund cerințelor
Rezolvare
#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)
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.