2702 - PerechiSosete

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Sursa: PerechiSosete


Cerinţa

Andrei lucrează într-un magazin de șosete, iar fiecare șosetă are asociat un numar întreg pentru a o identifica mai ușor din ce model face parte. Dându-se un vector neordonat de astfel de coduri, aflați câte perechi de șosete se pot forma.

Date de intrare

Programul citește de la tastatură numărul numar_sosete, iar apoi numar_sosete numere naturale, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi se va afișa pe ecran pe ecran numărul de perechi care se pot forma. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • 1 ⩽ numar_sosete ⩽ 100
  • Codurile șosetelor sunt cuprinse în intervalul [1, 100]

Exemple

Exemplul 1

Intrare
10
1 3 2 1 2 2 1 2 1 2
Ieșire
Datele sunt corecte.
4

Exemplul 2

Intrare
10
100 10000 100 20 1 20 30 10 98 99
Ieșire
Datele nu corespund restricțiilor impuse.

Exemplul 3

Intrare
5
1 2 3 4 5
Ieșire
Datele sunt corecte.
0


Rezolvare

# 2702 PerechiSosete

def numarare_sosete(vector, numar_sosete):
    numar_total_sosete = 0
    for i in range(numar_sosete):
        numar_total_sosete += vector.count(i) // 2
    print(numar_total_sosete)


def conform_restrictiilor(vector, numar_sosete):
    numar_sosete = int(input())
    if numar_sosete < 1 or numar_sosete > 100:
        print("Datele nu sunt comform restricțiilor impuse.")
        return False
    vector = list(map(int, input().split()))
    for x in vector:
        if x > 100 or x < 1:
            print("Datele nu sunt comform restricțiilor impuse.")
            return False
    print("Datele sunt corecte.")
    return True


if __name__ == '__main__':
    numar_sosete = int(input())
    vector = list(map(int, input().split()))
    if conform_restrictiilor(vector, numarare_sosete) is True:
        numarare_sosete(vector, numar_sosete)

Explicaţie cod

Acest cod are ca scop numărarea numărului total de perechi de șosete potrivite dintr-un vector și verificarea dacă datele din vector și numărul de șosete îndeplinesc anumite restricții.

Funcția numarare_sosete primește un vector de numere întregi și numărul total de șosete. Această funcție calculează numărul total de perechi de șosete potrivite din vector. Acesta parcurge fiecare număr de la 0 la numărul total de șosete și adaugă jumătate din numărul de șosete potrivite în variabila numar_total_sosete. Deoarece fiecare pereche de șosete potrivite contribuie cu o jumatate la numărul total de șosete potrivite, folosim operatorul de divizare întreagă // pentru a asigura că adăugăm întotdeauna un număr întreg de perechi la numărul total.

Funcția conform_restrictiilor primește un vector și numărul total de șosete ca argumente și verifică dacă datele îndeplinesc anumite restricții. Mai precis, verifică dacă numărul total de șosete este între 1 și 100 inclusiv, dacă fiecare element din vector este între 1 și 100 inclusiv. Dacă datele îndeplinesc aceste restricții, funcția returnează True, altfel returnează False și afișează un mesaj de eroare.

În blocul principal al codului, se primește input-ul sub formă de vector și numărul total de șosete și se verifică dacă datele îndeplinesc restricțiile impuse, folosind funcția conform_restrictiilor. Dacă datele sunt conforme, se calculează numărul total de perechi de șosete potrivite din vector, folosind funcția numarare_sosete.