0558 - Cartonase 2
Cerința
Supărat că Gigel a reușit, cu ajutorul vostru ( vezi problema Cartonașe ), să refacă progresia aritmetică scrisă pe cele n cartonașe, maleficul Costel este hotărât să intervină din nou.
Astfel, observă că Gigel a notat din nou pe n cartonașe cei n termeni consecutivi ai unei progresii aritmetice. Profitând de lipsa acestuia, Costel a ascuns un număr oarecare de cartonașe și le-a amestecat pe celelalte.
La întoarcere, Gigel constată lipsa a m cartonașe și vă roagă să-l ajutați să afle care sunt valorile scrise pe cartonașele care lipsesc.
Date de intrare
Programul citește de la tastatură numerele n m, cu semnificația de mai sus, apoi n-m numere naturale, reprezentând valorile scrise pe cartonașele care nu au fost ascunse.
Date de ieșire
Programul va afișa pe ecran m numere ordonate crescător, separate prin exact un spaţiu, reprezentând valorile scrise pe cartonașele ascunse.
Restricții și precizări
- 4 ⩽ n ⩽ 1.000
- 1 ⩽ m ⩽ n-2
- valorile scrise de Gigel pe cele n cartonașe 1.000.000.000
- Costel nu va lua niciodată primul sau ultimul cartonaș
Exemplul 1
- Intrare
- 6 2
- 13 19 7 4
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- 10 16
Explicație
Cele șase numere scrise de Gigel erau 4 7 10 13 16 19. Dintre acestea, lipsesc două, și anume 10 și 16.
Exemplul 2
- Intrare
- 3 2
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare
<syntaxhighlight lang="python" line>
- 0558 - Cartonase2
def validare_date(n, m):
if not (4 <= n <= 1000): return False if not (1 <= m <= n - 2): return False return True
def rezolva_problema(n, m, cartonase_scrise):
cartonase_scrise.sort() diferenta = (cartonase_scrise[-1] - cartonase_scrise[0]) // (n - 1) cartonase_lipsa = [] for i in range(cartonase_scrise[0], cartonase_scrise[-1], diferenta): if i not in cartonase_scrise: cartonase_lipsa.append(i) return cartonase_lipsa[:m]
n, m = map(int, input("Introduceti n si m: ").split())
if validare_date(n, m):
cartonase_scrise = list(map(int, input(f"Introduceti {n-m} numere scrise pe cartonase: ").split())) print("Datele de intrare corespund restricțiilor impuse") rezultat = rezolva_problema(n, m, cartonase_scrise) print(*rezultat)
else:
print("Datele de intrare NU corespund restricțiilor impuse") exit(0)
</syntaxhighlight>