1366 - Aceeasi paritate 2

From Bitnami MediaWiki
Revision as of 06:49, 19 March 2023 by Miriam (talk | contribs) (tot exercitiul)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: aceeasi_paritate_2


Cuprins

Cerinţă

Se dau n numere întregi. Să se insereze între oricare două numere de aceeași paritate media lor aritmetică. Algoritmul se va relua în mod repetat până când nu se mai poate adăuga șirului niciun nou element.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere întregi, separate prin spații.

Date de ieșire

Programul va afișa pe ecran pe câte o linie nouă, începând cu șirul inițial, toate șirurile distincte ce se pot construi prin metoda mai sus menționată. Fiecare șir se va scrie pe câte un rând nou.

Restricţii şi precizări

  • în cazul în care șirul conține două elemente consecutive egale, între acestea nu se va insera media aritmetică
  • 1 <=n <= 100
  • 1.000.000.000 <= elementele șirului <= 1.000.000.000

Exemple

Exemplul 1

Intrare
6
2 2 4 2 6 8
Ieșire
[2, 2, 3.0, 4, 3.0, 2, 4.0, 6, 7.0, 8] [2, 2, 3.0, 4, 3.0, 2, 3.0, 4.0, 5.0, 6, 7.0, 8]

Exemplul 2

Intrare
6
1 41 3 3 4 8
Ieșire
[1, 21.0, 41, 22.0, 3, 3, 4, 6.0, 8] [1, 11.0, 21.0, 31.0, 41, 22.0, 3, 3, 4, 5.0, 6.0, 7.0, 8] [1, 6.0, 11.0, 16.0, 21.0, 26.0, 31.0, 36.0, 41, 22.0, 3, 3, 4, 5.0, 6.0, 7.0, 8]

Exemplul 3

Intrare
5
a d 12 a
Ieșire
Trebuie sa introduceti exact 5 numere

Rezolvare

<syntaxhighlight lang="python" line="1"> def citire_n():

   while True:
       try:
           n = int(input("Introduceti numarul de elemente: "))
           if 1 <= n <= 100 and isinstance(n, int):
               return n
           print("Numarul trebuie sa fie intreg si cuprins intre 1 si 100.")
       except ValueError:
           print("Introduceti un numar intreg.")


def citire_sir(n):

   """
   Functia citeste de la tastatura n numere intregi si le adauga intr-un sir pe care il returneaza
   """
   sir = []
   try:
       input_string = input("Introduceti numerele separate prin spatiu: ")
       input_list = input_string.split()
       if len(input_list) != n:
           print(f"Trebuie sa introduceti exact {n} numere")
           return citire_sir(n)
       for i in range(n):
           x = int(input_list[i])
           while x < -1000000000 or x > 1000000000:
               print("Numarul trebuie sa fie cuprins intre -1000000000 si 1000000000")
               x = int(input(f"Introduceti numarul {i+1}: "))
           sir.append(x)
   except ValueError:
       print("Introduceti doar numere intregi separate prin spatiu")
       return citire_sir(n)
   return sir


def adauga_medie(sir):

   """
   Functia primeste un sir de numere intregi si adauga intre oricare doua numere diferite de aceeasi paritate media lor aritmetica
   """
   i = 0
   while i < len(sir)-1:
       if sir[i] % 2 == sir[i+1] % 2 and sir[i] != sir[i+1]:
           media = (sir[i] + sir[i+1]) / 2
           sir.insert(i+1, media)
           i += 2
       else:
           i += 1


def exista_elem_aceeasi_paritate(sir):

   for elem in range(0, len(sir)-1):
       if sir[elem] % 2 == sir[elem+1] % 2 and sir[elem] != sir[elem+1]:
           return True
   return False


if __name__ == '__main__':

   n = citire_n()
   sir = citire_sir(n)
   while exista_elem_aceeasi_paritate(sir):
       adauga_medie(sir)
       print(sir)

</syntaxhighlight>