3118 - Tort O: Diferență între versiuni

De la Universitas MediaWiki
 
(Nu s-au afișat 2 versiuni intermediare efectuate de același utilizator)
Linia 4: Linia 4:
Fişierul de intrare '''tort.in''' va conţine pe prima linie numerele '''M''' şi '''N''' separate printr-un spaţiu.
Fişierul de intrare '''tort.in''' va conţine pe prima linie numerele '''M''' şi '''N''' separate printr-un spaţiu.
== Date de ieşire ==
== Date de ieşire ==
Fişierul de ieşire '''tort.ou'''t va conţine pe o singură linie, două numere naturale separate printr-un spaţiu, primul fiind numărul minim de porţii, iar celălalt dimensiunea '''L'''.
Dacă datele sunt introduse corect,în fișier se va afișa :'''"Datele sunt introduse corect."''',apoi pe un rând nou fişierul de ieşire '''tort.out''' va conţine pe o singură linie, două numere naturale separate printr-un spaţiu, primul fiind numărul minim de porţii, iar celălalt dimensiunea '''L'''.În cazul contrar,se va afișa pe ecran '''"Datele nu corespund restricțiilor impuse."'''.
 
== Restricții și precizări ==
== Restricții și precizări ==
* 1 ⩽ M ⩽ N ⩽ 10000
* 1 ⩽ M ⩽ N ⩽ 10000
Linia 11: Linia 12:
: 20 24
: 20 24
; tort.out
; tort.out
: Datele introduse corespund restricțiilor impuse.
: Datele sunt introduse corect.
: 30 4
: 30 4
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def validare_date(n):
def validare_date(n):
     flag = False
     flag = False
     if n.isdigit():
     if isinstance(n, int):
         if 0 <= int(n) <= 1_000:
         if 0 <= n <= 10_000:
             flag = True
             flag = True
     return flag
     return flag


def validare_date(m):
def cmmdc(M, N):
     flag = False
     # Funcție care calculează CMMD folosind algoritmul Euclid
     if m.isdigit():
     while N:
         if 0 <= int(m) <= 1_000:
         M, N = N, M % N
            flag = True
     return M
     return flag


def gcd(a, b):
def numar_minim_patrate(M, N):
    #Funcție care calculează CMMD folosind algoritmul Euclid
     # Funcție care calculează numărul minim de pătrate și dimensiunea lor
    while b:
     divizor_comun = cmmdc(M, N)
        a, b = b, a % b
     nr_patrate = (M * N) // (divizor_comun ** 2)
    return a
     dimensiune_patrat = divizor_comun
 
     return nr_patrate, dimensiune_patrat
def get_min_squares(m, n):
     #Funcție care calculează numărul minim de pătrate și dimensiunea lor
     cmmd = gcd(m, n)
     min_squares = (m * n) // (cmmd ** 2)
     square_size = cmmd
     return min_squares, square_size


if __name__ == "__main__":
if __name__ == "__main__":
     with open("tort.in") as f:
     with open("tort.in") as f:
         m, n = map(int, f.readline().split())
         M, N = map(int, f.readline().split())


     if validare_date(n) and validare_date(m):
     if validare_date(M) and validare_date(N):
         min_squares, square_size = get_min_squares(m, n)
         nr_patrate, dimensiune_patrat = numar_minim_patrate(M, N)


         with open("tort.out", "w") as f:
         with open("tort.out", "w") as f:
             f.write(f"{min_squares} {square_size}\n")
             f.write(f"{nr_patrate} {dimensiune_patrat}\n")
     else:
     else:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Versiunea curentă din 25 aprilie 2023 10:42

Cerinţa

Un tort dreptunghiular de dimensiuni MxN trebuie împărţit în porţii pătrate de aceeaşi mărime. Găsiţi numărul minim de porţii care se pot obţine şi dimensiunea L a acestora. Atât dimensiunile dreptunghiului cât şi ale pătratelor în care se împarte sunt numere întregi.

Date de intrare

Fişierul de intrare tort.in va conţine pe prima linie numerele M şi N separate printr-un spaţiu.

Date de ieşire

Dacă datele sunt introduse corect,în fișier se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou fişierul de ieşire tort.out va conţine pe o singură linie, două numere naturale separate printr-un spaţiu, primul fiind numărul minim de porţii, iar celălalt dimensiunea L.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

  • 1 ⩽ M ⩽ N ⩽ 10000

Exemplu

tort.in
20 24
tort.out
Datele sunt introduse corect.
30 4

Rezolvare

def validare_date(n):
    flag = False
    if isinstance(n, int):
        if 0 <= n <= 10_000:
            flag = True
    return flag

def cmmdc(M, N):
    # Funcție care calculează CMMD folosind algoritmul Euclid
    while N:
        M, N = N, M % N
    return M

def numar_minim_patrate(M, N):
    # Funcție care calculează numărul minim de pătrate și dimensiunea lor
    divizor_comun = cmmdc(M, N)
    nr_patrate = (M * N) // (divizor_comun ** 2)
    dimensiune_patrat = divizor_comun
    return nr_patrate, dimensiune_patrat

if __name__ == "__main__":
    with open("tort.in") as f:
        M, N = map(int, f.readline().split())

    if validare_date(M) and validare_date(N):
        nr_patrate, dimensiune_patrat = numar_minim_patrate(M, N)

        with open("tort.out", "w") as f:
            f.write(f"{nr_patrate} {dimensiune_patrat}\n")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")