3656 – FGreater

From Bitnami MediaWiki

Sursa: FGreater


Cerinţă[edit | edit source]

Se dă un șir cu n elemente întregi și un număr x întreg. Funcția returnează cel mai mic număr din șir, strict mai mare decât x. În caz că nu există o asemenea valoare, funcția va returna valoarea -1

Date de intrare[edit | edit source]

Programul va citi de la tastatură o valoaren, urmată de n numere întregi, și un nr x.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa cel mai mic număr din șir, strict mai mare decât x (dacă nu există, se va returna -1). În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

Restricţii şi precizări[edit | edit source]

  • 0 <=n[i], x <= 2^31 - 1

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 4
Introduceti 4 numere separate prin spatiu:1234 21 12 1
Introduceti valoarea x: 11
Ieșire
Datele introduse sunt corecte!
Cel mai mic nr strict mai mare decat x este 12

Exemplul 2[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 4
Introduceti 4 numere separate prin spatiu:1234 21 12 1
Introduceti valoarea x: 123456
Ieșire
Datele introduse sunt corecte!
-1

Exemplul 3[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 6
Introduceti 6 numere separate prin spatiu:23443 323 23 23 2 34
Introduceti valoarea x: 5
Ieșire
Datele introduse sunt corecte!
Cel mai mic nr strict mai mare decat x este 23

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def is_integer(value):

   return value.isdigit()


def verificare_nr_elemente(n):

   if is_integer(n):
       if 0 < int(n) <= 1000000:
           return n
       else:
           print("Datele introduse sunt incorecte!")
           exit()
   else:
       print("Datele introduse sunt incorecte!")
       exit()


def verificare_vector(n, vector):

   if len(vector) != int(n):
       print("Datele introduse sunt incorecte!")
       exit()
   else:
       for i in vector:
           if is_integer(i):
               if int(i) <= 2**31 - 1:
                   continue
               else:
                   print("Datele introduse sunt incorecte!")
                   exit()
           else:
               print("Datele introduse sunt incorecte!")
               exit()


def verificare_x(x):

   if is_integer(x):
       if int(x) <= 2**31 - 1:
           return x
       else:
           print("Datele introduse sunt incorecte!")
           exit()
   else:
       print("Datele introduse sunt incorecte!")
       exit()


def nr_strict_mai_mare(sir, x):

   nr_mai_mari = []
   for elem in sir:
       if elem > int(x):
           nr_mai_mari.append(elem)
   if len(nr_mai_mari) == 0:
       print("-1")
       exit()
   else:
       nr_mai_mari_sortate = sorted(nr_mai_mari)
       print("Cel mai mic nr strict mai mare decat x este", nr_mai_mari_sortate[0])


if __name__ == '__main__':

   n = input("Introduceti numarul de elemente a sirului: ")
   verificare_nr_elemente(n)
   elem = input(f"Introduceti {n} numere separate prin spatiu:").split()
   verificare_vector(n, elem)
   lst_int = list(map(int, elem))
   x = input("Introduceti valoarea x: ")
   verificare_x(x)
   print("Datele introduse sunt corecte!")
   nr_strict_mai_mare(lst_int, x)

</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acest program este creat pentru a găsi cel mai mic număr strict mai mare decât o valoare dată (x) într-un șir de numere introdus de utilizator. Programul conține mai multe funcții pentru a verifica și procesa datele introduse:

  1. is_integer(value) - Verifică dacă un șir de caractere conține doar cifre și returnează True în acest caz sau False în caz contrar.
  2. verificare_nr_elemente(n) - Verifică dacă numărul de elemente introdus este un număr întreg între 1 și 1.000.000. Dacă nu este, afișează un mesaj de eroare și închide programul.
  3. verificare_vector(n, vector) - Verifică dacă lungimea vectorului introdus este egală cu n și dacă toate elementele sunt numere întregi mai mici sau egale cu 2^31 - 1. Dacă nu, afișează un mesaj de eroare și închide programul.
  4. verificare_x(x) - Verifică dacă valoarea x introdusă este un număr întreg mai mic sau egal cu 2^31 - 1. Dacă nu este, afișează un mesaj de eroare și închide programul.
  5. nr_strict_mai_mare(sir, x) - Primeste un sir de numere întregi și valoarea x, găsește cel mai mic număr strict mai mare decât x în sir, și afișează rezultatul. Dacă nu există un astfel de număr, afișează "-1".

În secțiunea __main__, programul solicită utilizatorului să introducă numărul de elemente și elementele sirului, apoi verifică datele introduse. De asemenea, se cere valoarea x și se verifică dacă este corectă. Dacă toate datele sunt corecte, programul apelează funcția nr_strict_mai_mare() pentru a găsi cel mai mic număr strict mai mare decât x în sir și afișează rezultatul.