0356 - Perechi: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/356/perechi] == 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...
 
No edit summary
 
Line 7: Line 7:
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.
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 ==
== Date de ieșire ==
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.
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 ==
== Restricții și precizări ==
* '''1 ≤ n ≤ 1000'''
* '''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 !!
* î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 !!
== Exemplu ==
== Exemplr ==
=== Exemplu 1 ===
; Intrare
; Intrare
: 6
: 6
Line 22: Line 23:
; Ieșire
; Ieșire
: 8 12
: 8 12
=== Exemplu 2 ===
; Intrare
: a
: b c
: d e
: f b
: n s
; Ieșire
: Datele nu sunt comform restricțiilor impuse
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line="1">
<syntaxhighlight lang="python" line="1">
n = int(input("Introduceți numărul de perechi: "))
def citeste_n():
a, b, maxim = 0, 0, -1
    while True:
for i in range(n):
        try:
    x, y = map(int, input("Introduceți o pereche: ").split())
            n = int(input("Introduceti numarul de perechi: "))
    if x > y:
            if n >= 1 and n <= 1000:
        grdis = x - y
                print("Datele sunt corecte.")
        if grdis > maxim:
                return n
             maxim = grdis
            else:
            a, b = x, y
                print("Datele nu sunt conform restrictiilor impuse.")
     else:
        except ValueError:
         grdis = y - x
            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:
         if grdis > maxim:
             maxim = grdis
             maxim = grdis
             a, b = x, y
             a, b = x, y
print("Perechea ceruta este: ", a, b)
    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>
</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.

Latest revision as of 17:45, 1 April 2023

Sursă: [1]

Cerință[edit | edit source]

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

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

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

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

Exemplu 1[edit | edit source]

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

Exemplu 2[edit | edit source]

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

Rezolvare[edit | edit source]

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

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.