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