1366 - Aceeasi paritate 2
Sursa: aceeasi_paritate_2
Cuprins
- 1Cerinţă
- 2Date de intrare
- 3Date de ieșire
- 4Restricţii şi precizări
- 5Exemple
- 5.1Exemplul 1
- 5.2Exemplul 2
- 5.2Exemplul 3
- 6Rezolvare
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>