3926 - Alternant 1: Difference between revisions

From Bitnami MediaWiki
Am creat de la zero.
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Cerinţa ==
Sursa: [https://www.pbinfo.ro/probleme/3926/alternant1]
Se dă un număr natural n. Să se verifice dacă este sau nu alternant.
 
== Explicație ==
== 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.  
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 ==
== Date de intrare ==
Programul citește de la tastatură numărul n.
Programul citește de la tastatură numărul.


== Date de ieşire ==
== Date de ieşire ==
Programul va afișa pe ecran mesajul da dacă n este alternant sau mesajul nu dacă nu este alternant.
Programul va afișa pe ecran mesajul da dacă numarul este alternant sau mesajul nu dacă nu este alternant.
== Restricții și precizări ==
== Restricții și precizări ==
* 0 ≤ n ≤ 1.000.000.000.000.000
* 0 ≤ numar ≤ 1.000.000.000.000.000


== Exemplu 1 ==
== Exemplu 1 ==
Line 17: Line 18:
: 265
: 265
; Ieșire
; Ieșire
: nu
: Numărul nu este alternant.


== Exemplu 2 ==
== Exemplu 2 ==
; Intrare
; Intrare
: 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
    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




# Verificam daca numarul este un numar natural si contine doar cifre
if __name__ == "__main__":
if not n.isdigit():
     numar = input("Introduceți un număr natural: ")
    print("Numarul introdus nu este valid.")
else:
     # Initializez o variabila care sa retina daca cifrele sunt pare sau impare
    paritate = int(n[0]) % 2  # Initial consideram ca prima cifra e par/impar


     # Verificam daca cifrele sunt alternate
     if not este_numar_natural(numar):
    for i in range(1, len(n)):
        print("Numărul introdus nu este valid.")
         if int(n[i]) % 2 != paritate: # Daca cifra curenta are o paritate diferita de cifra anterioara
    else:
             paritate = int(n[i]) % 2  # Schimbam paritatea
         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>