3926 - Alternant 1: Difference between revisions
mNo edit summary |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
Sursa: [https://www.pbinfo.ro/probleme/3926/alternant1] | |||
== Explicație == | |||
Spunem că un număr natural este alternant dacă cifrele pare alternează cu cele impare. De exemplu, numere alternante sunt 236, 6, 12345678. | |||
== Cerinţa == | == Cerinţa == | ||
Se dă un număr natural. Să se verifice dacă este sau nu alternant. | Se dă un număr natural. Să se verifice dacă este sau nu alternant. | ||
== Date de intrare == | == Date de intrare == | ||
Line 17: | Line 18: | ||
: 265 | : 265 | ||
; Ieșire | ; Ieșire | ||
: nu | : Numărul nu este alternant. | ||
== Exemplu 2 == | == Exemplu 2 == | ||
Line 23: | Line 24: | ||
: 8183 | : 8183 | ||
; Ieșire | ; Ieșire | ||
: | : Numărul este alternant. | ||
== Rezolvare == | |||
== Rezolvare == | === Rezolvare ver. 1 === | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def este_numar_natural(numar): | |||
try: | |||
numar_int = int(numar) | |||
if numar_int <= 0: | |||
return False # Returnăm False dacă numărul este mai mic sau egal cu 0 | |||
elif str(numar_int) != numar: | |||
return False # Returnăm False dacă conversia la întreg și apoi înapoi la șir nu dă același rezultat | |||
else: | |||
return True # Returnăm True dacă numărul este un număr natural valid | |||
except ValueError: | |||
return False # Returnăm False dacă conversia la întreg nu este posibilă | |||
def este_alternant(numar): | |||
cifre = str(numar) | |||
paritate = int(cifre[0]) % 2 # Paritatea primei cifre | |||
for i in range(1, len(cifre)): | |||
if int(cifre[i]) % 2 == paritate: | |||
return False # Returnăm False dacă găsim o cifră cu aceeași paritate ca și cifra anterioară | |||
paritate = 1 - paritate # Schimbăm paritatea între 0 și 1 | |||
# | return True # Returnăm True dacă toate cifrele sunt alternante în ceea ce privește paritatea | ||
if | |||
if __name__ == "__main__": | |||
numar = input("Introduceți un număr natural: ") | |||
if not este_numar_natural(numar): | |||
print("Numărul introdus nu este valid.") | |||
else: | |||
if este_alternant(numar): | |||
print("Numărul este alternant.") | |||
else: | else: | ||
print(" | print("Numărul nu este alternant.") | ||
print("Datele au fost introduse corect.") | |||
</syntaxhighlight> | |||
=== Rezolvare ver. 2 === | |||
<syntaxhighlight lang="python" line> | |||
numar = input("Introduceți un număr natural: ") | |||
try: | |||
numar_int = int(numar) # Convertim numarul introdus într-un întreg | |||
if numar_int <= 0: | |||
print("Numărul introdus nu este un număr natural.") | |||
elif str(numar_int) != numar: | |||
print("Numărul introdus conține caractere nevalide.") | |||
else: | else: | ||
print(" | cifre = str(numar_int) | ||
paritate = int(cifre[0]) % 2 # Paritatea primei cifre | |||
for i in range(1, len(cifre)): | |||
if int(cifre[i]) % 2 == paritate: | |||
print("Numărul nu este alternant.") | |||
break | |||
paritate = 1 - paritate # Schimbăm paritatea: 0 devine 1, 1 devine 0 | |||
else: | |||
print("Numărul este alternant.") | |||
print("Datele sunt introduse corect.") | |||
except ValueError: | |||
print("Numărul introdus nu este valid.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 10:46, 15 May 2023
Sursa: [1]
Explicație[edit | edit source]
Spunem că un număr natural este alternant dacă cifrele pare alternează cu cele impare. De exemplu, numere alternante sunt 236, 6, 12345678.
Cerinţa[edit | edit source]
Se dă un număr natural. Să se verifice dacă este sau nu alternant.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran mesajul da dacă numarul este alternant sau mesajul nu dacă nu este alternant.
Restricții și precizări[edit | edit source]
- 0 ≤ numar ≤ 1.000.000.000.000.000
Exemplu 1[edit | edit source]
- Intrare
- 265
- Ieșire
- Numărul nu este alternant.
Exemplu 2[edit | edit source]
- Intrare
- 8183
- Ieșire
- Numărul este alternant.
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
def este_numar_natural(numar):
try: numar_int = int(numar) if numar_int <= 0: return False # Returnăm False dacă numărul este mai mic sau egal cu 0 elif str(numar_int) != numar: return False # Returnăm False dacă conversia la întreg și apoi înapoi la șir nu dă același rezultat else: return True # Returnăm True dacă numărul este un număr natural valid except ValueError: return False # Returnăm False dacă conversia la întreg nu este posibilă
def este_alternant(numar):
cifre = str(numar) paritate = int(cifre[0]) % 2 # Paritatea primei cifre
for i in range(1, len(cifre)): if int(cifre[i]) % 2 == paritate: return False # Returnăm False dacă găsim o cifră cu aceeași paritate ca și cifra anterioară paritate = 1 - paritate # Schimbăm paritatea între 0 și 1
return True # Returnăm True dacă toate cifrele sunt alternante în ceea ce privește paritatea
if __name__ == "__main__":
numar = input("Introduceți un număr natural: ")
if not este_numar_natural(numar): print("Numărul introdus nu este valid.") else: if este_alternant(numar): print("Numărul este alternant.") else: print("Numărul nu este alternant.") print("Datele au fost introduse corect.")
</syntaxhighlight>
Rezolvare ver. 2[edit | edit source]
<syntaxhighlight lang="python" line>
numar = input("Introduceți un număr natural: ")
try:
numar_int = int(numar) # Convertim numarul introdus într-un întreg
if numar_int <= 0: print("Numărul introdus nu este un număr natural.") elif str(numar_int) != numar: print("Numărul introdus conține caractere nevalide.") else: cifre = str(numar_int) paritate = int(cifre[0]) % 2 # Paritatea primei cifre
for i in range(1, len(cifre)): if int(cifre[i]) % 2 == paritate: print("Numărul nu este alternant.") break paritate = 1 - paritate # Schimbăm paritatea: 0 devine 1, 1 devine 0
else: print("Numărul este alternant.")
print("Datele sunt introduse corect.")
except ValueError:
print("Numărul introdus nu este valid.")
</syntaxhighlight>