1255 - Lipsa: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(10 intermediate revisions by the same user not shown)
Line 9: Line 9:
Programul va conține pe prima linie numărul căutat.
Programul va conține pe prima linie numărul căutat.


Dacă datele sunt introduse corect, programul va rula.
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 cazul în care datele nu respectă restricțiile, se va afișa pe ecran: ''' "Datele nu corespund restricțiilor impuse.".'''
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Line 17: Line 17:


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare:
: Introdu un nr. N urmat de N numere:
: 5
: 5
:5 3 1 2
:Numelere N sunt:
; Ieșire
: 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 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):
def calculate_missing_number(n, nums):
     sum_given = sum(nums)
     sum_given = sum(nums)
Line 41: Line 39:
     print(missing_num)
     print(missing_num)


n, nums = read_numbers()
def validate_input(n, nums):
missing_num = calculate_missing_number(n, nums)
    if not isinstance(n, int):
display_missing_number(missing_num)
        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.")




Line 49: Line 70:
'''Explicatie cod:'''
'''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.
Această cod rezolvă problema de găsire a unui număr lipsă într-o secvență de numere de la 1 la N.


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 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 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 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 display_missing_number primește numărul lipsă și îl afișează.
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 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.
Î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>

  1. 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.