0309 – Permutare

De la Universitas MediaWiki

Sursa: [1]


Enunt

Se numeşte permutare a unei mulţimi finite orice rearanjare a tuturor elementelor acelei mulţimi.

Cerinţa

Se dă un şir cu n elemente, numere naturale. Să se verifice dacă reprezintă o permutare a mulţimii {1,2,...,n}.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului, separate prin spaţii.

Date de ieșire

Programul afișează pe ecran mesajul DA, dacă şirul reprezintă o permutare a mulţimii {1,2,...,n}, respectiv NU în caz contrar.Programul va afişa pe ecran numărul de cifre ale numărului citit.

Restricţii şi precizări

  • 1 ≤ n ≤ 100

Exemplu 1

Intrare
5
2 5 4 3 1
Ieșire
DA

Exemplu 2

Intrare
5
2 5 4 3 9
Ieșire
NU

Rezolvare

Rezolvare ver. 1

def citeste_nr_elemente():
    while True:
        nr_elemente = int(input("Introduceti numarul de elemente din multime (1-100): "))
        if 1 <= nr_elemente <= 100:
            return nr_elemente
        print("Numarul introdus nu este valid. Va rugam sa incercati din nou.")

def citeste_multime(nr_elemente):
    while True:
        multime = list(map(int, input(f"Introduceti {nr_elemente} numere separate prin spatii: ").split()))
        if all(1 <= element <= nr_elemente for element in multime):
            return multime
        print("Sirul introdus nu reprezinta o permutare a multimii {1, 2, ..., n}. Va rugam sa incercati din nou.")

def verifica_multime(nr_elemente, multime):
    if len(multime) == nr_elemente and len(set(multime)) == nr_elemente:
        return True
    return False

def main():
    nr_elemente = citeste_nr_elemente()
    multime = citeste_multime(nr_elemente)
    if verifica_multime(nr_elemente, multime):
        print("DA")
    else:
        print("NU")
    print("Datele sunt introduse corect.")

if __name__ == '__main__':
    main()

Rezolvare ver. 2

# Citim numarul de elemente din multime si verificam ca este intre 1 si 100 inclusiv.
while True:
    nr_elemente = int(input("Introduceti numarul de elemente din multime (1-100): "))
    if 1 <= nr_elemente <= 100:
        break
    print("Numarul introdus nu este valid. Va rugam sa incercati din nou.")

# Citim sirul de numere si verificam ca fiecare numar este intre 1 si numarul dat inclusiv.
while True:
    multime = list(map(int, input(f"Introduceti {nr_elemente} numere separate prin spatii: ").split()))
    if all(1 <= element <= nr_elemente for element in multime):
        break
    print("Sirul introdus nu reprezinta o permutare a multimii {1, 2, ..., n}. Va rugam sa incercati din nou.")

# Verificam daca sirul dat are lungimea specificata si contine toate elementele multimii {1, 2, ..., nr_elemente}, precum si ca toate elementele sunt distincte.
if len(multime) == nr_elemente and len(set(multime)) == nr_elemente:
    print("DA")
else:
    print("NU")
print("Datele sunt introduse corect.")