0309 – Permutare
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
<syntaxhighlight lang="python" line>
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()
</syntaxhighlight>
Rezolvare ver. 2
<syntaxhighlight lang="python" line>
- 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.")
</syntaxhighlight>