3072 - Sum Prod Max 3: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
Line 23: | Line 23: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | #3072 | ||
def | def get_numbers_sum(n): | ||
""" | |||
Returnează toate combinațiile posibile de trei numere a, b și c astfel încât a + b + c = n. | |||
""" | |||
numbers = [] | |||
for a in range(1, n - 1): | |||
for b in range(a, n - a): | |||
return | c = n - a - b | ||
if c >= b: | |||
numbers.append((a, b, c)) | |||
return numbers | |||
def get_max_product(numbers): | |||
""" | |||
Returnează produsul maxim dintre orice trei numere din lista `numbers`. | |||
""" | |||
max_prod = 0 | |||
max_numbers = () | |||
for a, b, c in numbers: | |||
prod = a * b * c | |||
if prod > max_prod: | |||
max_prod = prod | |||
max_numbers = (a, b, c) | |||
return max_numbers | |||
def | def print_numbers(numbers): | ||
""" | |||
Afișează cele trei numere din tupla `numbers` în ordine crescătoare. | |||
""" | |||
print(*sorted(numbers)) | |||
# Citim numărul n de la tastatură | |||
n = int(input("Introduceți numărul n: ")) | |||
# Obținem toate combinațiile posibile de trei numere astfel încât a + b + c = n | |||
numbers = get_numbers_sum(n) | |||
# Obținem cele trei numere care au produsul maxim | |||
max_numbers = get_max_product(numbers) | |||
# Afișăm cele trei numere în ordine crescătoare | |||
print_numbers(max_numbers) | |||
</syntaxhighlight> | |||
'''Explicatie cod:''' | |||
Acest cod definește trei funcții: | |||
1.get_numbers_sum(n): primește ca parametru un număr natural n și returnează o listă de tupluri cu toate combinațiile posibile de trei numere naturale a, b și c astfel încât a + b + c = n. | |||
2.get_max_product(numbers): primește ca parametru o listă de tupluri cu toate combinațiile posibile de trei numere naturale și returnează tupla cu cele trei numere care au produsul maxim. | |||
3.print_numbers(numbers): primește ca parametru o tuplă cu trei numere și le afișează în ordine crescătoare. | |||
În funcția main, utilizatorul introduce de la tastatură un număr natural n, apoi se obțin toate combinațiile posibile de trei numere care adunate dau suma egală cu n utilizând funcția get_numbers_sum(n). Se determină cele trei numere cu produsul maxim utilizând funcția get_max_product(numbers), iar apoi acestea sunt afișate în ordine crescătoare utilizând funcția print_numbers(numbers). |
Revision as of 10:10, 1 April 2023
Sursa: [1]
Cerinţa
Scrieți un program care citește un număr natural nenul n și care determină și afișează trei numere naturale a, b și c, astfel încât a+b+c=n și produsul a*b*c este maximul dintre produsele oricăror trei numere naturale care adunate dau suma egală cu n.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran cele trei numere naturale a b c, determinate, în ordine crescătoare, separate prin câte un spațiu.
Restricţii şi precizări
1 ≤ n ≤ 1.000.000.000;
cele trei numere se vor afișa în ordine crescătoare;
Exemplul 1
- Intrare
- 13
- Ieșire
- 4 4 5
Rezolvare
<syntaxhighlight lang="python" line>
- 3072
def get_numbers_sum(n):
""" Returnează toate combinațiile posibile de trei numere a, b și c astfel încât a + b + c = n. """ numbers = [] for a in range(1, n - 1): for b in range(a, n - a): c = n - a - b if c >= b: numbers.append((a, b, c)) return numbers
def get_max_product(numbers):
""" Returnează produsul maxim dintre orice trei numere din lista `numbers`. """ max_prod = 0 max_numbers = () for a, b, c in numbers: prod = a * b * c if prod > max_prod: max_prod = prod max_numbers = (a, b, c) return max_numbers
def print_numbers(numbers):
""" Afișează cele trei numere din tupla `numbers` în ordine crescătoare. """ print(*sorted(numbers))
- Citim numărul n de la tastatură
n = int(input("Introduceți numărul n: "))
- Obținem toate combinațiile posibile de trei numere astfel încât a + b + c = n
numbers = get_numbers_sum(n)
- Obținem cele trei numere care au produsul maxim
max_numbers = get_max_product(numbers)
- Afișăm cele trei numere în ordine crescătoare
print_numbers(max_numbers) </syntaxhighlight> Explicatie cod: Acest cod definește trei funcții:
1.get_numbers_sum(n): primește ca parametru un număr natural n și returnează o listă de tupluri cu toate combinațiile posibile de trei numere naturale a, b și c astfel încât a + b + c = n.
2.get_max_product(numbers): primește ca parametru o listă de tupluri cu toate combinațiile posibile de trei numere naturale și returnează tupla cu cele trei numere care au produsul maxim.
3.print_numbers(numbers): primește ca parametru o tuplă cu trei numere și le afișează în ordine crescătoare.
În funcția main, utilizatorul introduce de la tastatură un număr natural n, apoi se obțin toate combinațiile posibile de trei numere care adunate dau suma egală cu n utilizând funcția get_numbers_sum(n). Se determină cele trei numere cu produsul maxim utilizând funcția get_max_product(numbers), iar apoi acestea sunt afișate în ordine crescătoare utilizând funcția print_numbers(numbers).