3286 - Nr Not: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(7 intermediate revisions by the same user not shown)
Line 9: Line 9:
Programul va conține pe prima linie numărul '''k''', reprezentând numărul de valori naturale distincte din intervalul '''[1,n]''' care nu se găsesc în șir.
Programul va conține pe prima linie numărul '''k''', reprezentând numărul de valori naturale distincte din intervalul '''[1,n]''' care nu se găsesc în șir.


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 valorilor naturale distincte din intervalul [1,n] care NU se găsesc în șir.


Î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 ==
* 0 < '''n''' ⩽ 10
2 ≤ '''n''' ≤  10.000.000
 
numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât '''10.000.000'''
 
se recomandă evitarea memorării numerelor date într-un tablou sau în altă structură similară!


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: 4
: Numarul natural N ales,impreuna cu sirul ales sunt:
; Ieșire
: 10
: Datele corespund cerințelor.
: 8 8 8 5 3 3
: 576
; Datele de ieșire
: Datele sunt introduse corect.
: 7
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#3286
def patrate_perfecte(n):
def validate_input(n: int, nums: set[int]) -> bool:
    patrate = []
     if n < 2 or n > 10000000:
     i = 1
         return False
    while len(patrate) < n:
    for num in nums:
         patrat = i * i
         if num < 1 or num >= 10000000:
        patrate.append(patrat)
            return False
         i += 1
     return True
     return patrate


def find_remaining_numbers(n: int, nums: set[int]) -> int:
    for x in map(int, input().split()):
        nums.discard(x)


def calculeaza(numbers):
    return len(nums)
    product = 1
    for number in numbers:
        product *= number
    return product


if __name__ == '__main__':
    n = int(input("Numarul natural N ales,impreuna cu sirul ales sunt:"))
    nums = set(range(1, n+1))


def validare_numar(n):
    if not validate_input(n, nums):
     if n < 1 or n > 10:
        print("Datele nu corespund restricțiilor impuse.")
         return False
     else:
    return True
        print("Datele sunt introduse corect.")
        remaining = find_remaining_numbers(n, nums)
         print(remaining)
 
</syntaxhighlight>


'''Explicatie cod:'''


if __name__ == '__main__':
Funcția validate_input primește ca argumente un număr natural n și un set de numere nums, și returnează False dacă n nu este între 2 și 10.000.000, sau dacă oricare dintre numerele din setul nums nu se află între 1 și 10.000.000, altfel returnează True.
    n = int(input("Introduceți numărul n: "))
    if not validare_numar(n):
        print("Datele introduse nu corespund cerintelor.")
    else:
        squares = patrate_perfecte(n)
        product = calculeaza(squares)
        print("Datele introduse corespund cerintelor.")
        print(product)


Funcția find_remaining_numbers primește ca argumente un număr natural n și un set de numere nums, citind apoi numere de la tastatură cu input().split() și eliminându-le pe rând din setul nums folosind metoda discard(). Funcția returnează numărul de elemente rămase în setul nums.


</syntaxhighlight>
În funcția principală __main__, se citește de la tastatură numărul natural n și se construiește setul nums cu numerele de la 1 la n. Dacă argumentele primite nu sunt valide conform funcției validate_input, se afișează mesajul "Input invalid!". Altfel, se calculează numerele rămase în setul nums cu ajutorul funcției find_remaining_numbers și se afișează rezultatul.

Latest revision as of 07:09, 27 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

Programul contine pe prima linie un număr natural n (n∈[2,107]) , iar pe următoarele linii un șir de cel mult 1000 numere naturale din intervalul [1,n]. Numerele sunt ordonate descrescător și sunt separate prin câte un spațiu. Se cere să se determine numărul valorilor naturale distincte din intervalul [1,n] care NU se găsesc în șir.

Date de intrare[edit | edit source]

Programul conține pe prima linie numărul n, iar pe următoarele linii numere naturale separate prin spații.

Date de ieșire[edit | edit source]

Programul va conține pe prima linie numărul k, reprezentând numărul de valori naturale distincte din intervalul [1,n] care nu se găsesc în șir.

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 valorilor naturale distincte din intervalul [1,n] care NU se găsesc în șir.

Î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 ≤ 10.000.000

numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 10.000.000

se recomandă evitarea memorării numerelor date într-un tablou sau în altă structură similară!

Exemplul 1[edit | edit source]

Datele de intrare
Numarul natural N ales,impreuna cu sirul ales sunt:
10
8 8 8 5 3 3
Datele de ieșire
Datele sunt introduse corect.
7


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3286

def validate_input(n: int, nums: set[int]) -> bool:

   if n < 2 or n > 10000000:
       return False
   for num in nums:
       if num < 1 or num >= 10000000:
           return False
   return True

def find_remaining_numbers(n: int, nums: set[int]) -> int:

   for x in map(int, input().split()):
       nums.discard(x)
   return len(nums)

if __name__ == '__main__':

   n = int(input("Numarul natural N ales,impreuna cu sirul ales sunt:"))
   nums = set(range(1, n+1))
   if not validate_input(n, nums):
       print("Datele nu corespund restricțiilor impuse.")
   else:
       print("Datele sunt introduse corect.")
       remaining = find_remaining_numbers(n, nums)
       print(remaining)

</syntaxhighlight>

Explicatie cod:

Funcția validate_input primește ca argumente un număr natural n și un set de numere nums, și returnează False dacă n nu este între 2 și 10.000.000, sau dacă oricare dintre numerele din setul nums nu se află între 1 și 10.000.000, altfel returnează True.

Funcția find_remaining_numbers primește ca argumente un număr natural n și un set de numere nums, citind apoi numere de la tastatură cu input().split() și eliminându-le pe rând din setul nums folosind metoda discard(). Funcția returnează numărul de elemente rămase în setul nums.

În funcția principală __main__, se citește de la tastatură numărul natural n și se construiește setul nums cu numerele de la 1 la n. Dacă argumentele primite nu sunt valide conform funcției validate_input, se afișează mesajul "Input invalid!". Altfel, se calculează numerele rămase în setul nums cu ajutorul funcției find_remaining_numbers și se afișează rezultatul.