3926 - Alternant 1: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 18: Line 18:
: 265
: 265
; Ieșire
; Ieșire
: nu
: Numărul nu este alternant.


== Exemplu 2 ==
== Exemplu 2 ==
Line 24: Line 24:
: 8183
: 8183
; Ieșire
; Ieșire
: da
: Numărul este alternant.
 


== Rezolvare ==
== Rezolvare ==
Line 32: Line 31:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


def verifica_numar(numar):
def este_numar_natural(numar):
     try:
     try:
         numar_int = int(numar) # Convertim numarul introdus într-un întreg
         numar_int = int(numar)
 
         if numar_int <= 0:
         if numar_int <= 0:
             print("Numărul introdus nu este un număr natural.")
             return False  # Returnăm False dacă numărul este mai mic sau egal cu 0
         elif str(numar_int) != numar:
         elif str(numar_int) != numar:
             print("Numărul introdus conține caractere nevalide.")
             return False  # Returnăm False dacă conversia la întreg și apoi înapoi la șir nu dă același rezultat
         else:
         else:
             paritate = numar_int % 2  # Initial considerăm că prima cifră e pară/impară
             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


            # Verificăm dacă cifrele sunt alternate
    for i in range(1, len(cifre)):
            cifre = str(numar_int)
        if int(cifre[i]) % 2 == paritate:
            for i in range(1, len(cifre)):
            return False # Returnăm False dacă găsim o cifră cu aceeași paritate ca și cifra anterioară
                if int(cifre[i]) % 2 != paritate:  # Dacă cifra curentă are o paritate diferită de cifra anterioară
        paritate = 1 - paritate # Schimbăm paritatea între 0 și 1
                    paritate = int(cifre[i]) % 2 # Schimbăm paritatea
                else:
                    print("Numărul nu este alternant.")
                    break
            else:
                print("Numărul este alternant.")


     except ValueError:
     return True  # Returnăm True dacă toate cifrele sunt alternante în ceea ce privește paritatea
        print("Numărul introdus nu este valid.")




if __name__ == "__main__":
if __name__ == "__main__":
     numar = input("Introduceți un număr natural: ")
     numar = input("Introduceți un număr natural: ")
     verifica_numar(numar)
 
     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>
</syntaxhighlight>
Line 77: Line 83:
         print("Numărul introdus conține caractere nevalide.")
         print("Numărul introdus conține caractere nevalide.")
     else:
     else:
         paritate = numar_int % 2  # Initial considerăm că prima cifră e pară/impară
        cifre = str(numar_int)
         paritate = int(cifre[0]) % 2  # Paritatea primei cifre


        # Verificăm dacă cifrele sunt alternate
        cifre = str(numar_int)
         for i in range(1, len(cifre)):
         for i in range(1, len(cifre)):
             if int(cifre[i]) % 2 != paritate:  # Dacă cifra curentă are o paritate diferită de cifra anterioară
             if int(cifre[i]) % 2 == paritate:
                paritate = int(cifre[i]) % 2  # Schimbăm paritatea
            else:
                 print("Numărul nu este alternant.")
                 print("Numărul nu este alternant.")
                 break
                 break
            paritate = 1 - paritate  # Schimbăm paritatea: 0 devine 1, 1 devine 0
         else:
         else:
             print("Numărul este alternant.")
             print("Numărul este alternant.")
    print("Datele sunt introduse corect.")


except ValueError:
except ValueError:

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>