2904 - Sum Triunghiular

From Bitnami MediaWiki
Revision as of 19:22, 13 November 2023 by Hotico Iulia Denisa (talk | contribs) (→‎Exemplul 3:)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerință[edit | edit source]

Se dă un număr natural n. Să se determine dacă numărul se poate scrie ca sumă de două numere triunghiulare. Dacă este posibil se vor afișa două numere triunghiulare a căror sumă este egală cu n, în orice ordine, respectiv mesajul NU în caz contrar.

Un număr triunghiular este numărul de puncte dintr-un triunghi echilateral umplut uniform cu puncte. De exemplu, 1, 3, 6, 10, 15 sunt numere triunghiulare.

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, în orice ordine, două numere triunghiulare care însumate dau numărul n, separate printr-un spațiu, sau mesajul NU dacă numărul nu poate fi scris ca suma de două numere triunghiulare.

Restricții și precizări[edit | edit source]

  • n ≤ 10^12;
  • numerele triunghiulare determinate pot fi identice.

Exemplul 1:[edit | edit source]

Intrare
24
Ieșire
Datele de intrare corespund restrictiilor impuse.
3 21

Exemplul 2:[edit | edit source]

Intrare
15
Ieșire
Datele de intrare corespund restrictiilor impuse.
NU

Exemplul 3:[edit | edit source]

Intrare
ana are mere.
Ieșire
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1">

def numar_triunghiular(numar): # funcția pentru a calcula al n-lea număr triunghiular

   return numar * (numar + 1) // 2


def doua_numere_triunghiulare(numar): # funcția pentru a verifica dacă un număr poate fi scris ca suma a două numere triunghiulare

   i = 1
   while numar_triunghiular(i) < numar:
       j = 1
       while numar_triunghiular(j) <= numar - numar_triunghiular(i):
           if numar_triunghiular(i) + numar_triunghiular(j) == numar:
               return numar_triunghiular(i), numar_triunghiular(j)
           j += 1
       i += 1
   return "NU"


def verificare_restrictii(numar): # funcția de verificare a datelor de intrare

   if 0 < numar <= 10**12:    # adăugăm restricția pentru n
       return True
   else:
       return False


if __name__ == "__main__":

   try:
       n = int(input("Introduceti numarul: "))    # citirea numărului
       if verificare_restrictii(n):    # verificăm datele de intrare
           print("Datele de intrare corespund restrictiilor impuse.")
           rezultat = doua_numere_triunghiulare(n)    # apelăm funcția pentru a verifica dacă numărul poate fi scris ca suma a două numere triunghiulare
           if rezultat == "NU":
               print(rezultat)
           else:
               print(*rezultat)
   except ValueError:    # tratăm cazul în care utilizatorul introduce un input invalid
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>