1255 - Lipsa: Diferență între versiuni

De la Universitas MediaWiki
 
(Nu s-au afișat 11 versiuni intermediare efectuate de același utilizator)
Linia 8: Linia 8:
== Date de ieșire ==  
== Date de ieșire ==  
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, 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 ==
== Restricţii şi precizări ==
Linia 13: Linia 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>
Linia 23: Linia 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)
Linia 37: Linia 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.")




Linia 45: Linia 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.

Versiunea curentă din 29 aprilie 2023 08:11

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
Numelere N sunt:
5 3 1 2
Datele de ieșire
Datele sunt introduse corect.
4


Rezolvare

#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.")

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.