1255 - Lipsa: Diferență între versiuni
Linia 40: | Linia 40: | ||
def display_missing_number(missing_num): | def display_missing_number(missing_num): | ||
print(missing_num) | print(missing_num) | ||
def validate_input(n, nums): | |||
if not isinstance(n, int): | |||
print("Datele nu corespund restricțiilor impuse.") | |||
return False | |||
elif len(nums) != n: | |||
print("Datele nu corespund restricțiilor impuse.") | |||
return False | |||
elif any(num < 1 or num > n for num in nums): | |||
print("Datele nu corespund restricțiilor impuse.") | |||
return False | |||
else: | |||
return True | |||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n, nums = read_numbers() | n, nums = read_numbers() | ||
missing_num = calculate_missing_number(n, nums) | |||
if validate_input(n, nums): | |||
missing_num = calculate_missing_number(n, nums) | |||
display_missing_number(missing_num) | |||
print("Datele sunt introduse corect") | |||
Versiunea de la data 25 aprilie 2023 09:22
Sursa: [1]
Cerinţa
Se dau n - 1 numere naturale distincte de la 1 la n. Să se gaseasca numărul lipsă.
Date de intrare
Programul conține pe prima linie numărul n, iar pe a doua linie n - 1 numere naturale separate prin spații.
Date de ieșire
Programul va conține pe prima linie numărul căutat.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează numărul lipsă .
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.")
Restricţii şi precizări
2 ≤ n ≤ 1.000.000
Exemplul 1
- Intrare
- 5
- 5 3 1 2
- Ieșire
- 4
Rezolvare
#1255
def read_numbers():
n = int(input("Introdu un nr. N urmat de N numere:"))
nums = list(map(int, input().split()))
return n, nums
def calculate_missing_number(n, nums):
sum_given = sum(nums)
sum_n = (n * (n+1)) // 2
missing_num = sum_n - sum_given
return missing_num
def display_missing_number(missing_num):
print(missing_num)
def validate_input(n, nums):
if not isinstance(n, int):
print("Datele nu corespund restricțiilor impuse.")
return False
elif len(nums) != n:
print("Datele nu corespund restricțiilor impuse.")
return False
elif any(num < 1 or num > n for num in nums):
print("Datele nu corespund restricțiilor impuse.")
return False
else:
return True
if __name__ == '__main__':
n, nums = read_numbers()
if validate_input(n, nums):
missing_num = calculate_missing_number(n, nums)
display_missing_number(missing_num)
print("Datele sunt introduse corect")
Explicatie cod:
Acest cod implementează o funcție care primește un număr N urmat de N numere și calculează numărul lipsă dintr-o secvență de numere consecutive.
Funcția read_numbers primește input-ul de la utilizator, citind întâi numărul N și apoi lista de N numere sub formă de șir de caractere. Lista de numere este transformată într-o listă de întregi folosind funcția map și int, apoi sunt returnate atât numărul N cât și lista de numere.
Funcția calculate_missing_number primește numărul N și lista de numere ca parametri și calculează suma numerelor date și suma primelor n numere naturale. Diferența dintre cele două este numărul lipsă, care este returnat.
Funcția display_missing_number primește numărul lipsă și îl afișează.
În final, se apelează cele trei funcții în ordine pentru a citi input-ul de la utilizator, a calcula numărul lipsă și a-l afișa.