3118 - Tort O: Difference between revisions
Pagină nouă: == 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 ==... |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 4: | Line 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 == | ||
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 | ||
Line 11: | Line 12: | ||
: 20 24 | : 20 24 | ||
; tort.out | ; tort.out | ||
: Datele introduse | : 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 | if isinstance(n, int): | ||
if 0 <= | if 0 <= n <= 10_000: | ||
flag = True | flag = True | ||
return flag | return flag | ||
def | def cmmdc(M, N): | ||
# Funcție care calculează CMMD folosind algoritmul Euclid | |||
while N: | |||
M, N = N, M % N | |||
return M | |||
return | |||
def | 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 | |||
return | |||
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()) | |||
if validare_date( | if validare_date(M) and validare_date(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"{ | 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> |
Latest revision as of 10:42, 25 April 2023
Cerinţa[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
- 1 ⩽ M ⩽ N ⩽ 10000
Exemplu[edit | edit source]
- tort.in
- 20 24
- tort.out
- Datele sunt introduse corect.
- 30 4
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> 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.")
</syntaxhighlight>