0352 - Sum Cons: Difference between revisions
Paul Ungur (talk | contribs) Pagină nouă: ==Cerinţa== Se citește numărul natural nenul <span style=“color: red”>n</span>. Determinați toate modalitățile de a-l scrie pe <span style=“color: red”>n</span> ca sumă de cel puțin două numere naturale consecutive nenule. ==Date de intrare== Programul citește de la tastatură numărul <span style=“color: red”>n</span>. ==Date de ieşire== Programul afișează pe ecran descompunerile cerute, câte o descompunere pe o linie a ecranului, în ordine cresc... |
Paul Ungur (talk | contribs) No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
==Date de ieşire== | ==Date de ieşire== | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Date de intrare valide."''', apoi programul afișează pe ecran descompunerile cerute, câte o descompunere pe o linie a ecranului, în ordine crescătoare a numărului de termeni din descompunere, termenii unei descompuneri fiind scriși în ordine crescătoare și separați prin exact un spațiu. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Date de intrare invalide".''' | |||
==Restricţii şi precizări== | ==Restricţii şi precizări== | ||
Line 14: | Line 14: | ||
==Exemplu:== | ==Exemplu:== | ||
Date de intrare | Date de intrare | ||
30 | : 30 | ||
Date de ieșire | Date de ieșire | ||
9 10 11 | : Date de intrare valide | ||
6 7 8 9 | : 9 10 11 | ||
4 5 6 7 8 | : 6 7 8 9 | ||
: 4 5 6 7 8 | |||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def validare(n): | ||
if not (1 <= n <= 10_000_000): | |||
return False | |||
return True | |||
if not | |||
def | def gasire_secventa(n): | ||
for i in range(1, n // 2 + 1): | |||
a = int((2 * n - i - i ** 2) / (2 * i + 2)) | |||
if a >= 1 and n == (i + 1) * (2 * a + i) // 2: | |||
for k in range(i + 1): | |||
print(k + a, end=" ") | |||
print() | |||
if __name__ == '__main__': | |||
n = int(input()) | |||
if validare(n): | |||
print("Date de intrare valide") | |||
gasire_secventa(n) | |||
else: | |||
print("Date de intrare invalide") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatie cod:== | |||
==Explicatie== | Funcția validare(n) primește un parametru n de tip întreg și verifică dacă acesta se află în intervalul [1, 10_000_000]. Dacă condiția este îndeplinită, funcția returnează True, altfel returnează False. | ||
Funcția gasire_secventa(n) primește un parametru n de tip întreg și găsește secvențele de numere care satisfac o anumită condiție matematică. Aceasta parcurge un interval de la 1 până la jumătatea valorii lui n și verifică dacă există un număr a astfel încât formula (i + 1) * (2 * a + i) // 2 să fie egală cu n, unde i este un contor. Dacă găsește o astfel de secvență, o afișează pe ecran. | |||
În blocul if __name__ == '__main__':, se citește n de la intrare folosind funcția input(). Se validează datele de intrare utilizând funcția validare(n). Dacă datele de intrare sunt valide, se afișează un mesaj de confirmare, se apelează funcția gasire_secventa(n) și se afișează secvența găsită pe ecran. Altfel, se afișează un mesaj de eroare. | |||
Codul primește un număr de la intrare, validează datele și găsește secvențele care îndeplinesc condiția specificată. Acestea sunt afișate pe ecran. | |||
Funcția | |||
Latest revision as of 19:06, 29 June 2023
Cerinţa[edit | edit source]
Se citește numărul natural nenul n. Determinați toate modalitățile de a-l scrie pe n ca sumă de cel puțin două numere naturale consecutive nenule.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieşire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi programul afișează pe ecran descompunerile cerute, câte o descompunere pe o linie a ecranului, în ordine crescătoare a numărului de termeni din descompunere, termenii unei descompuneri fiind scriși în ordine crescătoare și separați prin exact un spațiu. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".
Restricţii şi precizări[edit | edit source]
1 ≤ n ≤ 10.000.000 pentru fiecare test, numărul n se poate scrie ca sumă de cel puțin 2 numere naturale consecutive nenule în cel puțin un mod.
Exemplu:[edit | edit source]
Date de intrare
- 30
Date de ieșire
- Date de intrare valide
- 9 10 11
- 6 7 8 9
- 4 5 6 7 8
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def validare(n):
if not (1 <= n <= 10_000_000): return False return True
def gasire_secventa(n):
for i in range(1, n // 2 + 1): a = int((2 * n - i - i ** 2) / (2 * i + 2)) if a >= 1 and n == (i + 1) * (2 * a + i) // 2: for k in range(i + 1): print(k + a, end=" ") print()
if __name__ == '__main__':
n = int(input())
if validare(n): print("Date de intrare valide") gasire_secventa(n) else: print("Date de intrare invalide")
</syntaxhighlight>
Explicatie cod:[edit | edit source]
Funcția validare(n) primește un parametru n de tip întreg și verifică dacă acesta se află în intervalul [1, 10_000_000]. Dacă condiția este îndeplinită, funcția returnează True, altfel returnează False. Funcția gasire_secventa(n) primește un parametru n de tip întreg și găsește secvențele de numere care satisfac o anumită condiție matematică. Aceasta parcurge un interval de la 1 până la jumătatea valorii lui n și verifică dacă există un număr a astfel încât formula (i + 1) * (2 * a + i) // 2 să fie egală cu n, unde i este un contor. Dacă găsește o astfel de secvență, o afișează pe ecran. În blocul if __name__ == '__main__':, se citește n de la intrare folosind funcția input(). Se validează datele de intrare utilizând funcția validare(n). Dacă datele de intrare sunt valide, se afișează un mesaj de confirmare, se apelează funcția gasire_secventa(n) și se afișează secvența găsită pe ecran. Altfel, se afișează un mesaj de eroare. Codul primește un număr de la intrare, validează datele și găsește secvențele care îndeplinesc condiția specificată. Acestea sunt afișate pe ecran.