3926 - Alternant 1

From Bitnami MediaWiki
Revision as of 10:46, 15 May 2023 by Petras.du.ioana (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>