3656 – FGreater

De la Universitas MediaWiki

Sursa: FGreater


Cerinţă

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

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

Date de ieșire

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

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

Exemple

Exemplul 1

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

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

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

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)

Explicație rezolvare

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.