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
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
Se dă un număr natural. Să se verifice dacă este sau nu alternant.
Date de intrare
Programul citește de la tastatură numărul.
Date de ieşire
Programul va afișa pe ecran mesajul da dacă numarul este alternant sau mesajul nu dacă nu este alternant.
Restricții și precizări
- 0 ≤ numar ≤ 1.000.000.000.000.000
Exemplu 1
- Intrare
- 265
- Ieșire
- Numărul nu este alternant.
Exemplu 2
- Intrare
- 8183
- Ieșire
- Numărul este alternant.
Rezolvare
Rezolvare ver. 1
<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
<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>