2448 - Pătrate3: Diferență între versiuni

De la Universitas MediaWiki
 
(Nu s-au afișat 7 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 11: Linia 11:


== 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 un 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.
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 ⩽ '''M''' ⩽ 260.000.000
* 7 ⩽ '''N''' ⩽ 2.147.302.920
* 1 ⩽ '''N''' ⩽ 2.147.302.920
* Numerele N, M, T și K sunt numere naturale
* Numerele N, M, T și K sunt numere naturale


Linia 45: Linia 45:
     if not (1 <= m <= 260000000):
     if not (1 <= m <= 260000000):
         return False
         return False
     if not (7 <= n <= 2147302920):
     if not (1 <= n <= 2147302920):
         return False
         return False
     # Verifică că M și N sunt numere naturale
     # Verifică că M și N sunt numere naturale
Linia 93: Linia 93:


== 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".
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 '''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 '''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 '''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.
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.
Î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.

Versiunea curentă din 12 mai 2023 18:24

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.