0567 - Pereche

De la Universitas MediaWiki

Cerința

n elevi numerotați de la 1 la n stau în cerc, astfel încât elevul 1 și elevul n sunt vecini. Pentru fiecare elev se cunoaște înălțimea. O pereche de elevi învecinați este pereche potrivită dacă diferența dintre înălțimile elevilor este minimă. Determinați o pereche potrivită.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n înălțimi ale elevilor, în ordine.

Date de ieșire

Programul va afișa pe ecran numerele de ordine i j, separate prin exact un spatiu, a elevilor care formează o pereche potrivită.

Restricții și precizări

  • 2 ≤ n ≤ 1000;
  • cele n numere citite vor fi mai mici decât 1.000;
  • dacă există mai multe perechi potrivite, se poate afișa oricare;

Exemplul 1

Intrare
5
4 6 3 5 3
Ieșire
Datele de intrare corespund restricțiilor impuse.
1 5

Exemplul 2

Intrare
1
4 6 3 5 3
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#0567 - Pereche
def gaseste_pereche_potrivita(n, inaltimi):
    # calculăm diferența absolută între prima și ultima înălțime
    diferenta_primul_ultimul = abs(inaltimi[0] - inaltimi[-1])
    indice_elev1, indice_elev2 = 0, n - 1

    # parcurgem lista de înălțimi pentru a găsi perechea cu cea mai mică diferență
    for i in range(n - 1):
        diferenta = abs(inaltimi[i] - inaltimi[i+1])
        if diferenta < diferenta_primul_ultimul:
            diferenta_primul_ultimul = diferenta
            indice_elev1, indice_elev2 = i, i+1

    return indice_elev1 + 1, indice_elev2 + 1


if __name__ == "__main__":
    n = int(input("Introduceți numărul de elevi: "))
    inaltimi = list(map(int, input("Introduceți înălțimile: ").split()))

    # verificarea restricțiilor
    if n < 2 or n > 1000 or max(inaltimi) > 1000:
        print("Datele de intrare nu corespund restricțiilor impuse.")
    else:
        print("Datele de intrare corespund restricțiilor impuse.")
        indice_elev1, indice_elev2 = gaseste_pereche_potrivita(n, inaltimi)
        print(f"Perechea potrivită este: {indice_elev1} {indice_elev2}")