3118 - Tort O: Difference between revisions

From Bitnami MediaWiki
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 ==
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

Revision as of 10:42, 25 April 2023

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 introduse corespund restricțiilor impuse.
30 4

Rezolvare

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