3271 - Pereche CMMDC: Difference between revisions
Robert Manc (talk | contribs) 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... |
Robert Manc (talk | contribs) No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 17: | Line 17: | ||
: 25 35 | : 25 35 | ||
; Ieșire | ; Ieșire | ||
: Datele | : 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 | : Datele de intrare corespund restricțiilor impuse. | ||
: 15 45 | : 15 45 | ||
== Rezolvare == | == Rezolvare == | ||
Line 84: | Line 84: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Acest program citeste un numar '''n''', citeste '''n''' perechi de numere întregi (citite ca string-uri), și determină perechea cu suma maximă dintre toate perechile care au cel mai mare divizor comun (cmmdc). Pentru fiecare pereche de numere, programul calculează cmmdc-ul și suma acestora și le compară cu valorile maxime până în prezent. Dacă cmmdc-ul este mai mare decât cel mai mare cmmdc de până acum, valorile maxime sunt actualizate cu valorile perechii curente, altfel dacă cmmdc-ul este același cu cel mai mare cmmdc de până acum, atunci se compară suma curentă a perechii cu suma maximă de până acum și se actualizează valorile maxime în consecință. Programul afișează perechea cu cea mai mare sumă. Programul verifică dacă datele de intrare corespund restricțiilor impuse. |
Latest revision as of 15:50, 28 April 2023
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran două numere, separate printr-un spațiu, reprezentând perechea determinată.
Restricții și precizări[edit | edit source]
- n ∈ Ν
- 0 ⩽ n ⩽ 1.000
- valorile din cele n numere citite vor fi mai mici decât 2^31
Exemplu1[edit | edit source]
- Intrare
- 4
- 12 18
- 16 12
- 18 30
- 25 35
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 18 30
Exemplu2[edit | edit source]
- Intrare
- 3
- 29 31
- 16 12
- 15 45
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 15 45
Rezolvare[edit | edit source]
<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> Acest program citeste un numar n, citeste n perechi de numere întregi (citite ca string-uri), și determină perechea cu suma maximă dintre toate perechile care au cel mai mare divizor comun (cmmdc). Pentru fiecare pereche de numere, programul calculează cmmdc-ul și suma acestora și le compară cu valorile maxime până în prezent. Dacă cmmdc-ul este mai mare decât cel mai mare cmmdc de până acum, valorile maxime sunt actualizate cu valorile perechii curente, altfel dacă cmmdc-ul este același cu cel mai mare cmmdc de până acum, atunci se compară suma curentă a perechii cu suma maximă de până acum și se actualizează valorile maxime în consecință. Programul afișează perechea cu cea mai mare sumă. Programul verifică dacă datele de intrare corespund restricțiilor impuse.