0309 – Permutare

From Bitnami MediaWiki

Sursa: [1]


Enunt[edit | edit source]

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

Cerinţa[edit | edit source]

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

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

Date de ieșire[edit | edit source]

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

  • 1 ≤ n ≤ 100

Exemplu 1[edit | edit source]

Intrare
5
2 5 4 3 1
Ieșire
DA

Exemplu 2[edit | edit source]

Intrare
5
2 5 4 3 9
Ieșire
NU

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

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

<syntaxhighlight lang="python" line>

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