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

De la Universitas MediaWiki
Linia 90: Linia 90:


== Explicatie rezolvare ==
== Explicatie rezolvare ==
Acest program validează inputul pentru o problemă specifică și apoi calculează un rezultat pe baza inputului.
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".
În ceea ce privește validarea inputului, funcția validate_input primește doi parametri: '''n''' și '''x_list'''.
 
n reprezintă numărul de înălțimi de verificat, iar '''x_list''' este o listă de înălțimi inițiale.  
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.
În cazul în care '''n''' este mai mic decât '''1''' sau mai mare decât '''1.000.000''' sau oricare dintre înălțimi este mai mică decât '''1''' sau mai mare decât '''1.000.000.000''', funcția afișează un mesaj de eroare și apoi iese din program.
 
Funcția main deschide două fișiere, "munti.in" și "munti.out", citind din fișierul de intrare '''munti.in''' valoarea lui '''n''' și lista de înălțimi '''x_list'''.  
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.
Apoi, apelând funcția '''validate_input''', se verifică validitatea inputului.
 
Dacă suma tuturor înălțimilor din listă este divizibilă cu '''n''', se afișează '''n''' în fișierul de ieșire '''munti.out'''.  
Funcția write_output(output) deschide fișierul "patrate3.out" și scrie valoarea output în el.
În caz contrar, se afișează '''n-1'''.
 
În general, acest program se ocupă de o problemă specifică care implică validarea inputului și apoi efectuarea unor calcule pe baza acelui input.
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.

Versiunea de la data 14 aprilie 2023 10:32

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 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.

Restricţii şi precizări

  • 1 ⩽ M ⩽ 260.000.000
  • 7 ⩽ N ⩽ 2.147.302.920
  • Numerele N, M, T și K sunt numere naturale

Exemplul 1

Intrare
4
2 6 2 2
Ieșire
4


Exemplul 2

Intrare
8
2 6 2 2
Ieșire
7

Rezolvare

#2448
import math


def validate_input(m, n):
    if not (1 <= m <= 260000000):
        return False
    if not (7 <= 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.