0557 - Cartonase
Cerința[edit | edit source]
Gigel a învățat la școală despre progresii aritmetice – o progresie aritmetică este un șir de numere cu proprietatea că diferența dintre oricare două valori consecutive este aceeași. Astfel, Gigel a notat pe nr_cartonase cartonașe cei nr_cartonase termeni consecutivi ai unei progresii aritmetice și a plecat la joacă. Maleficul Costel a ascuns exact două dintre cartonașe și le-a amestecat pe celelalte.
Determinaţi valorile scrise pe cele două cartonaşe ascunse de Costel.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul nr_cartonase, iar apoi nr_cartonase - 2 numere naturale, reprezentând valorile scrise pe cartonașele care nu au fost ascunse.
Date de ieșire[edit | edit source]
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse". În următorul rând se va afișa pe ecran două numere reprezentând valorile scrise pe cartonașele ascunse.
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Nu au fost respectate cerintele impuse".
Restricții și precizări[edit | edit source]
- 4 ⩽ nr_cartonase ⩽ 1000
- valorile scrise de Gigel pe cele nr_cartonase cartonașe sunt mai mare decât 0 și mai mici decât 1000000000
Exemplu 1[edit | edit source]
- Intrare
- 6
- 13
- 19
- 7
- 4
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- 10
- 16
Exemplu 2[edit | edit source]
- Intrare
- 0
- Ieșire
- Nu au fost respectate cerintele impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 0557 - Cartonase
def validare(nr_cartonase, valorile):
# Daca datele sunt invalide v-om face raise la eroarea ValueError
if not (nr_cartonase >= 4 and nr_cartonase <= 1000): raise ValueError
for i in range(nr_cartonase - 1): if not (valorile[i] > 0 and valorile[i] < 1000000000): raise ValueError
def cartonase(nr_cartonase, valorile):
# sortam lista valorile.sort()
# Aflam restul prin calculul # (valorile[nr_cartonase - 1] - valorile[0]) // (nr_cartonase + 1) rest = (valorile[nr_cartonase - 1] - valorile[0]) // (nr_cartonase + 1) temp = 1 valoare = valorile[0]
# Pornim de la 0 mergem pana la nr_cartonase + 1 for i in range(nr_cartonase + 1): # Adunam rest la valoare valoare += rest # Daca valoare este diferit de valoare[temp] atunci # este un numar pe un cartonas ascuns si o printam if valoare != valorile[temp]: print(valoare) # Daca nu este diferit adunam temp else: temp += 1
if __name__ == '__main__':
# Citim de la tastatura numerele cerute nr_cartonase = int(input()) nr_cartonase -= 2 valorile = []
for i in range(nr_cartonase): valoare = int(input()) valorile.append(valoare)
# Verificam daca datele introduse sunt valide # daca nu afisam mesajul corespunsador try: validare(nr_cartonase, valorile) except ValueError: print("Nu au fost respectate cerintele impuse") else: print("Datele de intrare corespund restricțiilor impuse")
cartonase(nr_cartonase, valorile)
</syntaxhighlight>