0356 - Perechi

From Bitnami MediaWiki
Revision as of 17:45, 1 April 2023 by MiclausIoana (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursă: [1]

Cerință

La concursul “Miss & Mister Boboc” participă n perechi de elevi, despre fiecare elev cunoscându-se înălțimea. Numim grad de disproporționalitate al unei perechi este diferența în valoare absolută dintre înălțimile elevilor care formează perechea.

Să se determine perechea cu grad de disproporționalitate maxim.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale, separate prin spaţii, reprezentând înălțimile elevilor dintr-o pereche.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Programul afișează pe ecran două numere x y, separate prin exact un spațiu, reprezentând perechea cu grad maxim de disproporționalitate. Dacă există mai multe perechi cu grad maxim de disproporționalitate, se va afișa prima pereche în ordinea în care au fost date. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • înălțimile elevilor sunt numere naturale cuprinse între 1 și 1000 – unitatea de măsură folosită este de origine extraterestră, nu încercați să o înțelegeți !!

Exemplr

Exemplu 1

Intrare
6
7 9
6 7
8 12
12 10
10 6
11 13
Ieșire
8 12

Exemplu 2

Intrare
a
b c
d e
f b
n s
Ieșire
Datele nu sunt comform restricțiilor impuse

Rezolvare

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

   while True:
       try:
           n = int(input("Introduceti numarul de perechi: "))
           if n >= 1 and n <= 1000:
               print("Datele sunt corecte.")
               return n
           else:
               print("Datele nu sunt conform restrictiilor impuse.")
       except ValueError:
           print("Trebuie introduse doar numere intregi.")


def citeste_perechi(n):

   valori = []
   for i in range(n):
       while True:
           try:
               valoare1, valoare2 = map(int, input("Introduceti o pereche de valori separate prin spatiu: ").split())
               if 1 <= valoare1 <= 1000 and 1 <= valoare2 <= 1000:
                   print("Datele sunt corecte.")
                   valori.append((valoare1, valoare2))
                   break
               else:
                   print("Datele nu sunt conform restrictiilor impuse.")
           except ValueError:
               print("Trebuie introduse doar valori numerice.")
   return valori


def pereche(valori):

   a, b, maxim = 0, 0, -1
   for i, pereche in enumerate(valori):
       x, y = pereche
       grdis = abs(x - y)
       if grdis > maxim:
           maxim = grdis
           a, b = x, y
   return a,b

if _name_ == '_main_':

   n = citeste_n()
   valori = citeste_perechi(n)
   x,y = pereche(valori)
   print("Perechea cu diferența minimă este la poziția: ", x, y)

</syntaxhighlight>

Explicații

Acesta este un program scris în Python care își propune să găsească perechea de valori cu diferența maximă dintr-un set de perechi de valori, după ce primește numărul de perechi și valorile acestora de la utilizator.
În funcția citeste_n(), utilizatorul este întâi invitat să introducă numărul de perechi. Acesta este verificat apoi pentru a se asigura că este un număr întreg între 1 și 1000, iar dacă este valabil, funcția returnează valoarea introdusă. În caz contrar, utilizatorului i se cere să introducă din nou un număr valabil.
În funcția citeste_perechi(n), utilizatorul este invitat să introducă perechi de valori, separate prin spațiu, și să le introducă de n ori, conform numărului de perechi introdus anterior. Asemenea primei funcții, fiecare valoare este verificată pentru a se asigura că este un număr întreg între 1 și 1000, și dacă este valabil, valoarea este adăugată la lista valori. În caz contrar, utilizatorului i se cere să introducă din nou valori valabile.
Funcția pereche(valori) primește lista de perechi de valori și parcurge fiecare pereche de valori. Pentru fiecare pereche, calculează diferența dintre cele două valori și verifică dacă această diferență este mai mare decât maximul curent. Dacă este, valoarea maximului este actualizată, iar perechea de valori aferentă este reținută în variabilele a și b. La final, funcția returnează cele două valori ale perechii cu diferența maximă.
În main, funcția citeste_n() este apelată pentru a citi numărul de perechi de valori, apoi funcția citeste_perechi(n) este apelată pentru a citi valorile propriu-zise. Apoi, funcția pereche(valori) este apelată pentru a găsi perechea cu diferența maximă, iar rezultatul este afișat într-un mesaj.