3926 - Alternant 1: Difference between revisions

From Bitnami MediaWiki
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.
== 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.


== 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
: da
: 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


# Verificam daca numarul este un numar natural si contine doar cifre
    for i in range(1, len(cifre)):
if not numar.isdigit():
        if int(cifre[i]) % 2 == paritate:
    print("Numarul introdus nu este valid.")
            return False # Returnăm False dacă găsim o cifră cu aceeași paritate ca și cifra anterioară
else:
        paritate = 1 - paritate  # Schimbăm paritatea între 0 și 1
    # Initializez o variabila care sa retina daca cifrele sunt pare sau impare
    paritate = int(numar[0]) % 2  # Initial consideram ca prima cifra e par/impar


     # Verificam daca cifrele sunt alternate
     return True  # Returnăm True dacă toate cifrele sunt alternante în ceea ce privește paritatea
     for i in range(1, len(numar)):
 
         if int(numar[i]) % 2 != paritate: # Daca cifra curenta are o paritate diferita de cifra anterioara
 
             paritate = int(numar[i]) % 2  # Schimbam 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:
         else:
             print("Numarul nu este alternant.")
             print("Numărul nu este alternant.")
            break
        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("Numarul este alternant.")
         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>