1255 - Lipsa: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp] == Cerinţa == Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == Date de ieșire == Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar prog...
 
Sinn Erich (talk | contribs)
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule.
Se dau '''n - 1''' numere naturale distincte de la '''1''' la '''n'''. Să se gaseasca numărul lipsă.
 
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numărul '''n'''.
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 ==  
== Date de ieșire ==  
Programul va afișa pe ecran,  mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
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 ==
* 0 < '''n''' ⩽ 10
2 ≤ '''n''' ≤ 1.000.000


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; 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
: 4
; Ieșire
: Datele corespund cerințelor.
: 576
<br>
== Exemplul 2 ==
; Intrare
: 16
; Ieșire
: Datele introduse nu corespund cerințelor.
<br>
== Exemplul 3 ==
; Intrare
: 7
; Ieșire
: Datele corespund cerințelor.
: 25401600
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#1255
def patrate_perfecte(n):
def calculate_missing_number(n, nums):
     patrate = []
     sum_given = sum(nums)
     i = 1
     sum_n = (n * (n+1)) // 2
    while len(patrate) < n:
    missing_num = sum_n - sum_given
        patrat = i * i
     return missing_num
        patrate.append(patrat)
        i += 1
     return patrate


def display_missing_number(missing_num):
    print(missing_num)


def calculeaza(numbers):
def validate_input(n, nums):
     product = 1
     if not isinstance(n, int):
     for number in numbers:
        print("Datele nu corespund restricțiilor impuse.")
         product *= number
        return False
    return product
    elif len(nums) != n-1:
 
        print("Datele nu corespund restricțiilor impuse.")
 
        return False
def validare_numar(n):
     elif any(num < 1 or num > n for num in nums):
    if n < 1 or n > 10:
         print("Datele nu corespund restricțiilor impuse.")
        return False
    elif len(set(nums)) != n-1:
        print("Datele nu corespund restricțiilor impuse.")
         return False
         return False
     return True
     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 __name__ == '__main__':
    if validate_input(n, nums):
    n = int(input("Introduceți numărul n: "))
        missing_num = calculate_missing_number(n, nums)
    if not validare_numar(n):
        display_missing_number(missing_num)
         print("Datele introduse nu corespund cerintelor.")
         print("Datele sunt introduse corect.")
     else:
     else:
        squares = patrate_perfecte(n)
         print("Datele nu corespund restricțiilor impuse.")
        product = calculeaza(squares)
         print("Datele introduse corespund cerintelor.")
        print(product)




</syntaxhighlight>
</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.

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.