3156 - perm min max

From Bitnami MediaWiki

Cerința[edit | edit source]

Se citește o mulțime cu n numere naturale. Afișați în ordine lexicografică toate permutările mulțimii citite în care elementul minim și cel maxim nu își schimbă poziția.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale distincte, separate prin spații.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran permutările cerute, pe rânduri separate, fiecare permutare având elementele separate prin câte un spațiu.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 10
  • cele n numere citite vor fi mai mici decât 1.000.000.000 și vor fi distincte

Exemplu 1[edit | edit source]

Intrare

6
8 2 7 9 4 5

Iesire

4 2 5 9 7 8
4 2 5 9 8 7
4 2 7 9 5 8
4 2 7 9 8 5
4 2 8 9 5 7
4 2 8 9 7 5
5 2 4 9 7 8
5 2 4 9 8 7
5 2 7 9 4 8
5 2 7 9 8 4
5 2 8 9 4 7
5 2 8 9 7 4
7 2 4 9 5 8
7 2 4 9 8 5
7 2 5 9 4 8
7 2 5 9 8 4
7 2 8 9 4 5
7 2 8 9 5 4
8 2 4 9 5 7
8 2 4 9 7 5
8 2 5 9 4 7
8 2 5 9 7 4
8 2 7 9 4 5
8 2 7 9 5 4


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> from itertools import permutations

def main():

   n = int(input())
   arr = list(map(int, input().split()))
   min_value = min(arr)
   max_value = max(arr)
   min_index = arr.index(min_value)
   max_index = arr.index(max_value)
   # To store the results
   results = set()
   # Generate permutations
   for perm in permutations(arr):
       if perm[min_index] == min_value and perm[max_index] == max_value:
           results.add(perm)
   # Sort results lexicographically
   results = sorted(results)
   # Print results
   for result in results:
       print(" ".join(map(str, result)))

if __name__ == "__main__":

   main()

</syntaxhighlight>