3161 - permutari5: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerinta== 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== Programul citeste de la tastatura numarul n, iar apoi n numere naturale distincte, separate prin spatii. ==Date de iesire== Programul va afisa pe ecran permutarile cerute, pe rânduri separate, fiecare permutare avand elementele separate prin cate un spatiu. ==Restrictii si precizari== 1...
 
mNo edit summary
 
(2 intermediate revisions by the same user not shown)
Line 39: Line 39:
==Explicatie==
==Explicatie==
In acest exemplu se genereaza permutarile in care numarul 2 nu isi schimba pozitia.
In acest exemplu se genereaza permutarile in care numarul 2 nu isi schimba pozitia.
==Exemplu3==
: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==
: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==
==Rezolvare==


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
#3161 permutari5
#3161 permutari5
from itertools import permutations
from itertools import permutations
Line 53: Line 63:
         print(" ".join(map(str, perm_list)))
         print(" ".join(map(str, perm_list)))


# Citim numărul n
def validate_input(n, numbers):
n = int(input("Introduceți numărul n: "))
    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


# Citim n numere naturale distincte
    generate_permutations(numbers)
numbers = list(map(int, input(f"Introduceți cele {n} numere naturale distincte, separate prin spații: ").split()))


# Verificăm și afișăm permutările dorite
if __name__ == "__main__":
generate_permutations(numbers)
    main()
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 18:53, 9 February 2024

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>