1255 - Lipsa: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
Line 29: | Line 29: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#1255 | #1255 | ||
def calculate_missing_number(n, nums): | def calculate_missing_number(n, nums): | ||
sum_given = sum(nums) | sum_given = sum(nums) | ||
Line 57: | Line 52: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n | n = int(input("Introdu un nr. N urmat de N numere:")) | ||
nums = list(map(int, input().split())) | |||
if validate_input(n, nums): | if validate_input(n, nums): | ||
Line 63: | Line 59: | ||
display_missing_number(missing_num) | display_missing_number(missing_num) | ||
print("Datele sunt introduse corect") | print("Datele sunt introduse corect") | ||
Revision as of 22:05, 27 April 2023
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
- Datele de intrare
- Introdu un nr. N urmat de N numere:
- 5
- 5 3 1 2
- Datele de ieșire
- Datele sunt introduse corect.
- 4
Rezolvare
<syntaxhighlight lang="python" line>
- 1255
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 = int(input("Introdu un nr. N urmat de N numere:")) nums = list(map(int, input().split()))
if validate_input(n, nums): missing_num = calculate_missing_number(n, nums) display_missing_number(missing_num) print("Datele sunt introduse corect")
</syntaxhighlight>
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.