2904 - Sum Triunghiular: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerință== 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...
 
 
(5 intermediate revisions by 2 users not shown)
Line 20: Line 20:


==Exemplul 1:==
==Exemplul 1:==
;Intrare
;Intrare
:24
:24
;Ieșire
;Ieșire
:Datele de intrare corespund restrictiilor impuse.
:3 21
:3 21


==Exemplul 2:==
==Exemplul 2:==
;Intrare
;Intrare
:15
:15
;Ieșire
;Ieșire
:Datele de intrare corespund restrictiilor impuse.
:NU
:NU
==Exemplul 3:==
;Intrare
:ana are mere.
;Ieșire
:Datele de intrare nu corespund restrictiilor impuse.


==Rezolvare==
==Rezolvare==
Line 35: Line 57:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


# Definim o funcție pentru a calcula al n-lea număr triunghiular
def numar_triunghiular(numar):    # funcția pentru a calcula al n-lea număr triunghiular
def numar_triunghiular(n):
     return numar * (numar + 1) // 2
     return n * (n + 1) // 2


# Definim o funcție pentru a verifica dacă un număr poate fi scris ca suma a două numere triunghiulare
 
def doua_numere_triunghiulare(n):
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
     i = 1
    # Parcurgem toate numerele triunghiulare până când ajungem la n
     while numar_triunghiular(i) < numar:
     while numar_triunghiular(i) < n:
         j = 1
         j = 1
        # Pentru fiecare număr triunghiular, verificăm dacă există un alt număr triunghiular astfel încât suma lor să fie egală cu n
         while numar_triunghiular(j) <= numar - numar_triunghiular(i):
         while numar_triunghiular(j) <= n - numar_triunghiular(i):
             if numar_triunghiular(i) + numar_triunghiular(j) == numar:
             if numar_triunghiular(i) + numar_triunghiular(j) == n:
                # Dacă găsim două astfel de numere, le returnăm
                 return numar_triunghiular(i), numar_triunghiular(j)
                 return numar_triunghiular(i), numar_triunghiular(j)
             j += 1
             j += 1
         i += 1
         i += 1
    # Dacă nu găsim două astfel de numere, returnăm "NU"
     return "NU"
     return "NU"


# Acest bloc de cod este executat doar dacă acest script este rulat direct (nu este importat ca un modul)
 
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__":
if __name__ == "__main__":
     # Citim numărul de la tastatură
     try:
    n = int(input())
        n = int(input("Introduceti numarul: "))   # citirea numărului
    # Apelăm funcția pentru a verifica dacă numărul poate fi scris ca suma a două numere triunghiulare
        if verificare_restrictii(n):    # verificăm datele de intrare
    rezultat = doua_numere_triunghiulare(n)
            print("Datele de intrare corespund restrictiilor impuse.")
    # Afișăm rezultatul
            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":
            if rezultat == "NU":
        print(rezultat)
                print(rezultat)
    else:
            else:
        print(*rezultat)
                print(*rezultat)
    except ValueError:    # tratăm cazul în care utilizatorul introduce un input invalid
        print("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 19:22, 13 November 2023

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>