3348 - SumaPuteri2: Difference between revisions
Tag: Manual revert |
Vardai Erwin (talk | contribs) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
==Cerința== | ==Cerința== | ||
Se dă un număr natural n. Descompuneți numărul n ca sumă de puteri ale lui 2. | Se dă un număr natural '''n'''. Descompuneți numărul '''n''' ca sumă de puteri ale lui 2. | ||
==Date de intrare== | ==Date de intrare== | ||
Programul citește de la tastatură numărul n. | Programul citește de la tastatură numărul '''n'''. | ||
==Date de ieșire== | ==Date de ieșire== | ||
Programul va afișa pe ecran, în ordine crescătoare, separate prin câte un spațiu, puterile lui 2 care au suma n. | Programul va afișa pe ecran, în ordine crescătoare, separate prin câte un spațiu, puterile lui 2 care au suma '''n'''. | ||
==Restricții și precizări== | ==Restricții și precizări== | ||
1 ≤ n < 231 | 1 ≤ '''n''' < 231 | ||
==Exemplu== | ==Exemplu== | ||
Line 18: | Line 18: | ||
==Rezolvare== | ==Rezolvare== | ||
=== Rezolvare ver. 1=== | |||
<syntaxhighlight lang="python" line> | |||
def validare(n): | |||
return n.isdigit() and 1 <= int(n) < 231 | |||
def descompunere_in_puteri_de_2(n): | |||
puteri_de_2 = [] | |||
k = 0 | |||
while 2 ** k <= n: | |||
k += 1 | |||
k -= 1 | |||
while k >= 0: | |||
if 2 ** k <= n: | |||
puteri_de_2.append(2 ** k) | |||
n -= 2 ** k | |||
k -= 1 | |||
return puteri_de_2[::-1] | |||
if __name__ == '__main__': | |||
n = input("Introduceți numărul n: ") | |||
if validare(n): | |||
n = int(n) | |||
print("Datele introduse corespund restricțiilor impuse.") | |||
puteri_de_2 = descompunere_in_puteri_de_2(n) | |||
print("{}".format(" ".join( | |||
str(p) for p in puteri_de_2))) | |||
else: | |||
print("Datele introduse nu corespund restricțiilor impuse.") | |||
</syntaxhighlight> |
Latest revision as of 15:37, 15 March 2023
Cerința[edit | edit source]
Se dă un număr natural n. Descompuneți numărul n ca sumă de puteri ale lui 2.
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 ordine crescătoare, separate prin câte un spațiu, puterile lui 2 care au suma n.
Restricții și precizări[edit | edit source]
1 ≤ n < 231
Exemplu[edit | edit source]
- Intrare
- 43
- Iesire
- 1 2 8 32
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line> def validare(n):
return n.isdigit() and 1 <= int(n) < 231
def descompunere_in_puteri_de_2(n):
puteri_de_2 = [] k = 0 while 2 ** k <= n: k += 1 k -= 1 while k >= 0: if 2 ** k <= n: puteri_de_2.append(2 ** k) n -= 2 ** k k -= 1 return puteri_de_2[::-1]
if __name__ == '__main__':
n = input("Introduceți numărul n: ") if validare(n): n = int(n) print("Datele introduse corespund restricțiilor impuse.") puteri_de_2 = descompunere_in_puteri_de_2(n) print("{}".format(" ".join( str(p) for p in puteri_de_2))) else: print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>