3072 - Sum Prod Max 3: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(12 intermediate revisions by the same user not shown)
Line 7: Line 7:


== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
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.
 
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou 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. .
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 0 < '''n''' ⩽ 10
1 ≤ n ≤ 1.000.000.000;
 
cele trei numere se vor afișa în ordine crescătoare;


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: 4
:Introduceti numarul n:
; Ieșire
: 13
: Datele corespund cerințelor.
; Datele de ieșire
: 576
: Datele sunt introduse corect.
<br>
: 4 4 5
 
== Exemplul 2 ==
; Intrare
: 16
; Ieșire
: Datele introduse nu corespund cerințelor.
<br>
== Exemplul 3 ==
; Intrare
: 7
; Ieșire
: Datele corespund cerințelor.
: 25401600
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#3072
def patrate_perfecte(n):
def get_numbers_sum(n):
     patrate = []
     """
     i = 1
    Returnează toate combinațiile posibile de trei numere a, b și c astfel încât a + b + c = n.
    while len(patrate) < n:
    """
        patrat = i * i
    numbers = []
        patrate.append(patrat)
     for a in range(1, n - 1):
        i += 1
        for b in range(a, n - a):
     return patrate
            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 calculeaza(numbers):
def print_numbers(numbers):
     product = 1
     """
     for number in numbers:
     Afișează cele trei numere din tupla `numbers` în ordine crescătoare.
        product *= number
    """
     return product
     print(*sorted(numbers))


if __name__ == '__main__':
    # Citim numărul n de la tastatură și validăm
    n = int(input("Introduceți numărul n: "))
    if not 1 <= n <= 1000000000:
        print("Datele nu corespund restricțiilor impuse.")
        exit()


def validare_numar(n):
    # Obținem toate combinațiile posibile de trei numere astfel încât a + b + c = n
     if n < 1 or n > 10:
     numbers = get_numbers_sum(n)
        return False
    return True


    # Obținem cele trei numere care au produsul maxim
    max_numbers = get_max_product(numbers)


if __name__ == '__main__':
     # Afișăm cele trei numere în ordine crescătoare
     n = int(input("Introduceți numărul n: "))
     print("Datele sunt introduse corect.")
     if not validare_numar(n):
     print_numbers(max_numbers)
        print("Datele introduse nu corespund cerintelor.")
     else:
        squares = patrate_perfecte(n)
        product = calculeaza(squares)
        print("Datele introduse corespund cerintelor.")
        print(product)




</syntaxhighlight>
</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).

Latest revision as of 07:08, 27 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

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[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieșire[edit | edit source]

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.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou 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. .

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Restricţii şi precizări[edit | edit source]

1 ≤ n ≤ 1.000.000.000;

cele trei numere se vor afișa în ordine crescătoare;

Exemplul 1[edit | edit source]

Datele de intrare
Introduceti numarul n:
13
Datele de ieșire
Datele sunt introduse corect.
4 4 5


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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))

if __name__ == '__main__':

   # Citim numărul n de la tastatură și validăm
   n = int(input("Introduceți numărul n: "))
   if not 1 <= n <= 1000000000:
       print("Datele nu corespund restricțiilor impuse.")
       exit()
   # 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("Datele sunt introduse corect.")
   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).