3161 - permutari5: Difference between revisions
Cristina94 (talk | contribs) 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... |
Cristina94 (talk | contribs) 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))) | ||
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 | |||
generate_permutations(numbers) | |||
numbers | |||
if __name__ == "__main__": | |||
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">
- 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>