3271 - Pereche CMMDC: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dă un șir de '''n''' perechi de numere naturale nenule. Să se determine perechea pentru care cel mai mare divizor comun este maxim. Dacă există mai multe asemenea perechi, se va determina aceea pentru care suma valorilor este maximă. Dacă există mai multe asemenea perechi, se va determina prima din șir. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' perechi de numere naturale. == Date de ieşire == Progr...
 
No edit summary
Line 17: Line 17:
: 25 35
: 25 35
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 18 30
: 18 30
== Exemplu2 ==
== Exemplu2 ==
Line 26: Line 26:
: 15 45
: 15 45
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 15 45
: 15 45
== Rezolvare ==
== Rezolvare ==

Revision as of 10:32, 11 April 2023

Cerinţa

Se dă un șir de n perechi de numere naturale nenule. Să se determine perechea pentru care cel mai mare divizor comun este maxim. Dacă există mai multe asemenea perechi, se va determina aceea pentru care suma valorilor este maximă. Dacă există mai multe asemenea perechi, se va determina prima din șir.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale.

Date de ieşire

Programul va afișa pe ecran două numere, separate printr-un spațiu, reprezentând perechea determinată.

Restricții și precizări

  • n ∈ Ν
  • 0 ⩽ n ⩽ 1.000
  • valorile din cele n numere citite vor fi mai mici decât 2^31

Exemplu1

Intrare
4
12 18
16 12
18 30
25 35
Ieșire
Datele de intrare corespund restricțiilor impuse.
18 30

Exemplu2

Intrare
3
29 31
16 12
15 45
Ieșire
Datele de intrare corespund restricțiilor impuse.
15 45

Rezolvare

<syntaxhighlight lang="python" line> def verificare_numar(numar):

   if numar.isdigit() and 0 <= int(numar) <= 2**31-1:
       return True
   return False


def verificare_n(n):

   if 0 <= n <= 1000:
       return True
   return False


def CMD(numar1, numar2):

   while numar2:
       rest = numar1 % numar2
       numar1, numar2 = numar2, rest
   cmmdc = numar1
   return cmmdc


if __name__ == '__main__':

   n = int(input())
   cmmdc_maxim = 0
   suma_maxima_perechiilor = 0
   perechea_cu_suma_maxima = None
   if verificare_n(n):
       date = True
       for i in range(n):
           pereche = input().split()
           numar1, numar2 = pereche[0], pereche[1]
           if verificare_numar(numar1) and verificare_numar(numar2):
               numar1, numar2 = int(numar1), int(numar2)
               cmmdc = CMD(numar1, numar2)
               suma_perechii = numar1 + numar2
               if cmmdc > cmmdc_maxim:
                   cmmdc_maxim = cmmdc
                   suma_maxima_perechiilor = suma_perechii
                   perechea_cu_suma_maxima = (numar1, numar2)
               elif cmmdc == cmmdc_maxim and suma_perechii > suma_maxima_perechiilor:
                   suma_maxima_perechiilor = suma_perechii
                   perechea_cu_suma_maxima = (numar1, numar2)
           else:
               date = False
       if date:
           print("\nDatele de intrare corespund restricțiilor impuse.\n")
           print(perechea_cu_suma_maxima[0], perechea_cu_suma_maxima[1])
       else:
           print("Datele de intrare nu corespund restricțiilor impuse.")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>