4232 - Cif Sim: Difference between revisions
Am creat de la zero. |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
sursa: [https://www.pbinfo.ro/probleme/4232/cif-sim] | |||
== Cerinţa == | == Cerinţa == | ||
Pentru un numar dat de la tastatura, afișați mesajul DA dacă toate cifrele sale egal depărtate de extremități au suma egală cu 9, sau afișați NU dacă există cel puțin o pereche care nu are suma 9. | Pentru un numar dat de la tastatura, afișați mesajul DA dacă toate cifrele sale egal depărtate de extremități au suma egală cu 9, sau afișați NU dacă există cel puțin o pereche care nu are suma 9. | ||
Line 27: | Line 28: | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | |||
<syntaxhighlight lang="python" line> | |||
def valideaza_intrare(): | |||
""" | |||
Funcție pentru validarea datelor de intrare. | |||
Solicită introducerea unui număr natural mai mare sau egal cu 10. | |||
Ridică o excepție de tip ValueError dacă numărul introdus nu respectă condițiile. | |||
""" | |||
while True: | |||
try: | |||
numar = int(input("Introduceți un număr natural mai mare sau egal cu 10: ")) | |||
if numar < 10: | |||
raise ValueError("Numărul introdus trebuie să fie mai mare sau egal cu 10.") | |||
return numar | |||
except ValueError as e: | |||
print(f"Eroare: {e}") | |||
def verifica_perechi(numar): | |||
""" | |||
Funcție pentru verificarea perechilor de cifre. | |||
Primește un număr și verifică dacă toate perechile de cifre egal depărtate de extremități au suma 9. | |||
Returnează True dacă condiția este îndeplinită și False în caz contrar. | |||
""" | |||
# Convertim numărul la o listă de cifre | |||
cifre = [int(c) for c in str(numar)] | |||
# Iterăm prin jumătatea listei de cifre | |||
for i in range(len(cifre) // 2): | |||
# Verificăm dacă suma celor două cifre de la extremități este 9 | |||
if cifre[i] + cifre[-i-1] != 9: | |||
# Dacă nu, numărul nu îndeplinește condiția cerută, deci returnăm False | |||
return False | |||
# Dacă am verificat toate perechile și toate îndeplinesc condiția, returnăm True | |||
return True | |||
if __name__ == "__main__": | |||
# Validăm numărul introdus de utilizator | |||
numar = valideaza_intrare() | |||
# Verificăm perechile de cifre în număr | |||
if verifica_perechi(numar): | |||
# Dacă toate perechile sunt corecte, afișăm mesajul corespunzător | |||
print("Datele sunt introduse corect.") | |||
print("DA - Toate perechile de cifre egal depărtate de extremități au suma 9.") | |||
else: | |||
# Dacă cel puțin o pereche nu este corectă, afișăm mesajul corespunzător | |||
print("NU - Cel puțin una dintre perechi nu are suma 9.") | |||
</syntaxhighlight> | |||
=== Rezolvare ver. 2 === | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
Line 56: | Line 108: | ||
break | break | ||
else: | else: | ||
print("Datele sunt introduse corect.") | |||
print("DA - Toate perechile de cifre egal depărtate de extremități au suma 9.") | print("DA - Toate perechile de cifre egal depărtate de extremități au suma 9.") | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 19:36, 15 May 2023
sursa: [1]
Cerinţa[edit | edit source]
Pentru un numar dat de la tastatura, afișați mesajul DA dacă toate cifrele sale egal depărtate de extremități au suma egală cu 9, sau afișați NU dacă există cel puțin o pereche care nu are suma 9.
Explicație[edit | edit source]
Pentru un număr natural dat vrem să verificăm dacă toate cifrele sale egal depărtate de extremități au suma egală cu 9. De exemplu, n = 314586 are perechile de cifre egal depărtate de extremități (3, 6), (1,8) și (4,5). Se obțin sumele 3+6=9, 1+8=9 și 4+5=9. Numărul 386 are perechile (3,6) și (8,8) pentru că având număr impar de cifre, atunci 8 are pereche pe el însuși.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul.
Date de ieşire[edit | edit source]
Programul va verifica perechile de cifre egale depărtate de extremități și va afișa "DA" sau "NU" în consecință.
Restricții și precizări[edit | edit source]
- 1 ≤ numar ≤ 10^18
Exemplu 1[edit | edit source]
- Intrare
- 314586
- Ieșire
- DA
Exemplu 2[edit | edit source]
- Intrare
- 386
- Ieșire
- NU
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
def valideaza_intrare():
""" Funcție pentru validarea datelor de intrare. Solicită introducerea unui număr natural mai mare sau egal cu 10. Ridică o excepție de tip ValueError dacă numărul introdus nu respectă condițiile. """ while True: try: numar = int(input("Introduceți un număr natural mai mare sau egal cu 10: ")) if numar < 10: raise ValueError("Numărul introdus trebuie să fie mai mare sau egal cu 10.") return numar except ValueError as e: print(f"Eroare: {e}")
def verifica_perechi(numar):
""" Funcție pentru verificarea perechilor de cifre. Primește un număr și verifică dacă toate perechile de cifre egal depărtate de extremități au suma 9. Returnează True dacă condiția este îndeplinită și False în caz contrar. """ # Convertim numărul la o listă de cifre cifre = [int(c) for c in str(numar)] # Iterăm prin jumătatea listei de cifre for i in range(len(cifre) // 2): # Verificăm dacă suma celor două cifre de la extremități este 9 if cifre[i] + cifre[-i-1] != 9: # Dacă nu, numărul nu îndeplinește condiția cerută, deci returnăm False return False # Dacă am verificat toate perechile și toate îndeplinesc condiția, returnăm True return True
if __name__ == "__main__":
# Validăm numărul introdus de utilizator numar = valideaza_intrare() # Verificăm perechile de cifre în număr if verifica_perechi(numar): # Dacă toate perechile sunt corecte, afișăm mesajul corespunzător print("Datele sunt introduse corect.") print("DA - Toate perechile de cifre egal depărtate de extremități au suma 9.") else: # Dacă cel puțin o pereche nu este corectă, afișăm mesajul corespunzător print("NU - Cel puțin una dintre perechi nu are suma 9.")
</syntaxhighlight>
Rezolvare ver. 2[edit | edit source]
<syntaxhighlight lang="python" line>
- Citim numărul de la tastatură și validăm datele de intrare
while True:
try: numar = int(input("Introduceți un număr natural mai mare sau egal cu 10: ")) if numar < 10: raise ValueError("Numărul introdus trebuie să fie mai mare sau egal cu 10.") break except ValueError as e: print(f"Eroare: {e}")
- Convertim numărul într-o listă de cifre
cifre = [int(c) for c in str(numar)]
- Verificăm condiția pentru perechile de cifre
if len(cifre) % 2 == 0:
for i in range(0, len(cifre), 2): if cifre[i] + cifre[i+1] != 9: print("NU - Cel puțin una dintre perechi nu are suma 9.") break else: print("DA - Toate perechile de cifre egal depărtate de extremități au suma 9.")
else:
for i in range(0, len(cifre)-1, 2): if cifre[i] + cifre[i+1] != 9: print("NU - Cel puțin una dintre perechi nu are suma 9.") break else: print("Datele sunt introduse corect.") print("DA - Toate perechile de cifre egal depărtate de extremități au suma 9.")
</syntaxhighlight>