0567 - Pereche: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==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 num...
Tag: visualeditor
 
No edit summary
Tag: visualeditor
 
Line 24: Line 24:
:Datele de intrare nu corespund restricțiilor impuse.
:Datele de intrare nu corespund restricțiilor impuse.
==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python" line="">
<syntaxhighlight lang="python" line="1">
#0567 - Pereche
#0567 - Pereche
def gaseste_pereche_potrivita(n, inaltimi):
def gaseste_pereche_potrivita(n, inaltimi):
     diferenta_primul_ultimul = abs(inaltimi[0] - inaltimi[-1])
    # calculăm diferența absolută între prima și ultima înălțime
     indice_elev1, indice_elev2 = 0, n - 1
     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):
     for i in range(n - 1):
         diferenta = abs(inaltimi[i] - inaltimi[i+1])
         diferenta = abs(inaltimi[i] - inaltimi[i+1])
Line 36: Line 38:
             indice_elev1, indice_elev2 = i, i+1
             indice_elev1, indice_elev2 = i, i+1


     return indice_elev1+1, indice_elev2+1
     return indice_elev1 + 1, indice_elev2 + 1
 


if __name__ == "__main__":
if __name__ == "__main__":
     n = int(input("Introduceți numărul de elevi: "))
     n = int(input("Introduceți numărul de elevi: "))
     inaltimi = list(map(int, input("Introduceți înălțimile separate prin spațiu: ").split()))
     inaltimi = list(map(int, input("Introduceți înălțimile: ").split()))
 
    # verificarea restricțiilor
     if n < 2 or n > 1000 or max(inaltimi) > 1000:
     if n < 2 or n > 1000 or max(inaltimi) > 1000:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare nu corespund restricțiilor impuse.")
Line 48: Line 53:
         print(f"Perechea potrivită este: {indice_elev1} {indice_elev2}")
         print(f"Perechea potrivită este: {indice_elev1} {indice_elev2}")


   
 
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 10:44, 21 May 2023

Cerința[edit]

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[edit]

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

Date de ieșire[edit]

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[edit]

  • 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[edit]

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

Exemplul 2[edit]

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

Rezolvare[edit]

<syntaxhighlight lang="python" line="1">

  1. 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}")


</syntaxhighlight>