3161 - permutari5

From Bitnami MediaWiki
Revision as of 18:53, 9 February 2024 by Cristina94 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinta[edit | edit source]

Se citeste o multime cu n numere naturale. Afisati in ordine lexicografica toate permutarile multimii citite in care elementul minim nu isi schimba pozitia.

Date de intrare[edit | edit source]

Programul citeste de la tastatura numarul n, iar apoi n numere naturale distincte, separate prin spatii.

Date de iesire[edit | edit source]

Programul va afisa pe ecran permutarile cerute, pe rânduri separate, fiecare permutare avand elementele separate prin cate un spatiu.

Restrictii si precizari[edit | edit source]

1 ≤ n ≤ 10 cele n numere citite vor fi mai mici decat 1.000.000.000 si vor fi distincte

Exemplul 1[edit | edit source]

Intrare
4
3 1 2 5
Iesire
3 1 5 2
3 1 2 5
5 1 3 2
5 1 2 3
2 1 3 5
2 1 5 3

Explicatie[edit | edit source]

In acest exemplu se genereaza permutarile in care numarul 1 nu isi schimba pozitia.

Exemplul 2[edit | edit source]

Intrare
3
3 2 5
Iesire
3 2 5
5 2 3

Explicatie[edit | edit source]

In acest exemplu se genereaza permutarile in care numarul 2 nu isi schimba pozitia.

Exemplu3[edit | edit source]

Introduceți numărul n: 4
Introduceți cele 4 numere naturale distincte, separate prin spații: 1 2 3 4 5
Date de intrare invalide: Trebuie să introduceți exact 4 numere naturale distincte.

Exemplu4[edit | edit source]

Introduceți numărul n: -5
Introduceți cele -5 numere naturale distincte, separate prin spații:
Date de intrare invalide: Numărul n trebuie să fie un număr întreg pozitiv.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 3161 permutari5

from itertools import permutations

def generate_permutations(arr):

   min_index = arr.index(min(arr))
   for perm in permutations(arr[0:min_index] + arr[min_index+1:]):
       perm_list = list(perm)
       perm_list.insert(min_index, arr[min_index])
       print(" ".join(map(str, perm_list)))

def validate_input(n, numbers):

   if not isinstance(n, int) or n <= 0:
       return False, "Numărul n trebuie să fie un număr întreg pozitiv."
   if len(numbers) != n or len(set(numbers)) != n:
       return False, f"Trebuie să introduceți exact {n} numere naturale distincte."
   return True, None

def main():

   try:
       n = int(input("Introduceți numărul n: "))
       numbers = list(map(int, input(f"Introduceți cele {n} numere naturale distincte, separate prin spații: ").split()))
   except ValueError:
       print("Date de intrare invalide. Numărul n și elementele listei trebuie să fie numere naturale.")
       return
   is_valid, error_message = validate_input(n, numbers)
   if not is_valid:
       print("Date de intrare invalide:", error_message)
       return
   generate_permutations(numbers)

if __name__ == "__main__":

   main()

</syntaxhighlight>