1255 - Lipsa: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 17: | Line 17: | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; | ; Datele de intrare: | ||
: Introdu un nr. N urmat de N numere: | |||
: 5 | : 5 | ||
:5 3 1 2 | :Numelere N sunt: | ||
; | : 5 3 1 2 | ||
; Datele de ieșire: | |||
: Datele sunt introduse corect. | |||
: 4 | : 4 | ||
<br> | <br> | ||
Line 27: | Line 30: | ||
<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 45: | Line 43: | ||
print("Datele nu corespund restricțiilor impuse.") | print("Datele nu corespund restricțiilor impuse.") | ||
return False | return False | ||
elif len(nums) != n: | elif len(nums) != n-1: | ||
print("Datele nu corespund restricțiilor impuse.") | print("Datele nu corespund restricțiilor impuse.") | ||
return False | return False | ||
elif any(num < 1 or num > n for num in nums): | elif any(num < 1 or num > n for num in nums): | ||
print("Datele nu corespund restricțiilor impuse.") | |||
return False | |||
elif len(set(nums)) != n-1: | |||
print("Datele nu corespund restricțiilor impuse.") | print("Datele nu corespund restricțiilor impuse.") | ||
return False | return False | ||
Line 55: | Line 56: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n | n = int(input("Introdu un nr. N urmat de N numere:")) | ||
nums = list(map(int, input("Numerele N sunt:").split())) | |||
if validate_input(n, nums): | if validate_input(n, nums): | ||
missing_num = calculate_missing_number(n, nums) | missing_num = calculate_missing_number(n, nums) | ||
display_missing_number(missing_num) | display_missing_number(missing_num) | ||
print("Datele sunt introduse corect") | print("Datele sunt introduse corect.") | ||
else: | |||
print("Datele nu corespund restricțiilor impuse.") | |||
Line 67: | Line 70: | ||
'''Explicatie cod:''' | '''Explicatie cod:''' | ||
Această cod rezolvă problema de găsire a unui număr lipsă într-o secvență de numere de la 1 la N. | |||
Funcția | Funcția `calculate_missing_number` primește două argumente: `n` și `nums`. `n` reprezintă lungimea secvenței, iar `nums` este o listă de numere întregi care reprezintă secvența. Funcția calculează suma secvenței prin apelarea funcției `sum(nums)` și calculează suma secvenței de la 1 la `n` prin utilizarea formulei `(n * (n+1)) // 2`. Numărul lipsă este apoi calculat prin scăderea sumei secvenței date de la suma secvenței de la 1 la `n`. Numărul lipsă este returnat de funcție. | ||
Funcția | Funcția `display_missing_number` primește un argument, `missing_num`, care este numărul lipsă calculat de funcția `calculate_missing_number`. Funcția afișează numărul lipsă. | ||
Funcția | Funcția `validate_input` primește două argumente, `n` și `nums`, și verifică dacă intrarea este validă. Funcția returnează `False` dacă intrarea nu respectă constrângerile necesare și returnează `True` altfel. Constrângerile sunt că `n` trebuie să fie un număr întreg, `nums` trebuie să fie o listă de lungime `n-1`, toate numerele din listă trebuie să fie între 1 și `n`, iar toate numerele din listă trebuie să fie distincte. | ||
În | În blocul principal, utilizatorul introduce `n` și `nums`. Intrarea este validată apelând funcția `validate_input`. Dacă intrarea este validă, numărul lipsă este calculat prin apelarea funcției `calculate_missing_number` și afișat prin apelarea funcției `display_missing_number`. Dacă intrarea nu este validă, este afișat un mesaj de eroare. Dacă intrarea este validă, este afișat un mesaj de succes. |
Latest revision as of 08:11, 29 April 2023
Sursa: [1]
Cerinţa[edit | edit source]
Se dau n - 1 numere naturale distincte de la 1 la n. Să se gaseasca numărul lipsă.
Date de intrare[edit | edit source]
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[edit | edit source]
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[edit | edit source]
2 ≤ n ≤ 1.000.000
Exemplul 1[edit | edit source]
- Datele de intrare
- Introdu un nr. N urmat de N numere:
- 5
- Numelere N sunt:
- 5 3 1 2
- Datele de ieșire
- Datele sunt introduse corect.
- 4
Rezolvare[edit | edit source]
<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-1: 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 elif len(set(nums)) != n-1: 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("Numerele N sunt:").split()))
if validate_input(n, nums): missing_num = calculate_missing_number(n, nums) display_missing_number(missing_num) print("Datele sunt introduse corect.") else: print("Datele nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicatie cod:
Această cod rezolvă problema de găsire a unui număr lipsă într-o secvență de numere de la 1 la N.
Funcția `calculate_missing_number` primește două argumente: `n` și `nums`. `n` reprezintă lungimea secvenței, iar `nums` este o listă de numere întregi care reprezintă secvența. Funcția calculează suma secvenței prin apelarea funcției `sum(nums)` și calculează suma secvenței de la 1 la `n` prin utilizarea formulei `(n * (n+1)) // 2`. Numărul lipsă este apoi calculat prin scăderea sumei secvenței date de la suma secvenței de la 1 la `n`. Numărul lipsă este returnat de funcție.
Funcția `display_missing_number` primește un argument, `missing_num`, care este numărul lipsă calculat de funcția `calculate_missing_number`. Funcția afișează numărul lipsă.
Funcția `validate_input` primește două argumente, `n` și `nums`, și verifică dacă intrarea este validă. Funcția returnează `False` dacă intrarea nu respectă constrângerile necesare și returnează `True` altfel. Constrângerile sunt că `n` trebuie să fie un număr întreg, `nums` trebuie să fie o listă de lungime `n-1`, toate numerele din listă trebuie să fie între 1 și `n`, iar toate numerele din listă trebuie să fie distincte.
În blocul principal, utilizatorul introduce `n` și `nums`. Intrarea este validată apelând funcția `validate_input`. Dacă intrarea este validă, numărul lipsă este calculat prin apelarea funcției `calculate_missing_number` și afișat prin apelarea funcției `display_missing_number`. Dacă intrarea nu este validă, este afișat un mesaj de eroare. Dacă intrarea este validă, este afișat un mesaj de succes.