2904 - Sum Triunghiular: Difference between revisions
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"> | ||
# | def numar_triunghiular(numar): # funcția pentru a calcula al n-lea număr triunghiular | ||
return numar * (numar + 1) // 2 | |||
return | |||
# | |||
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 | ||
while numar_triunghiular(i) < numar: | |||
while numar_triunghiular(i) < | |||
j = 1 | j = 1 | ||
while numar_triunghiular(j) <= numar - numar_triunghiular(i): | |||
while numar_triunghiular(j) <= | if numar_triunghiular(i) + numar_triunghiular(j) == numar: | ||
if numar_triunghiular(i) + numar_triunghiular(j) == | |||
return numar_triunghiular(i), numar_triunghiular(j) | return numar_triunghiular(i), numar_triunghiular(j) | ||
j += 1 | j += 1 | ||
i += 1 | i += 1 | ||
return "NU" | 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__": | 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> | </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>