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

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>