2904 - Sum Triunghiular
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>