Zad1 Napisać generator g(n,r) zwracający wszystkie permutacje

advertisement
Zad1
Napisać generator g(n,r) zwracający
wszystkie permutacje liczb 1,2,...,n
takie, że dowolna różnica dwu kolejnych wyrazów permutacji
jest nie większa niż r.
np. g(4,2) ma zwrócić wszystkie takie permutacje zbioru 1,2,3,4,
w których 1 nie występuje koło 4 czyli:
1,2,3,4
1,2,4,3
1,3,2,4
1,3,4,2
2,1,3,4
4,2,1,3
4,2,3,1
2,4,3,1
3,1,2,4
4,3,1,2
4,3,2,1
3,4,2,1
Zad2
Napisać generator g(n) zwracający wszystkie rozmieszczenia
liczb 1,2,...,n w dwóch cyklach reprezentowanych przez parę list.
Efektem dzaiałania:
for r in g(4):print(r)
ma być
([1],[2,3,4]) albo te same cykle zapisane w inny sposób np: ([1],[3,4,2]), ([4,2,3],[1]),...
([1],[2,4,3]) albo ...
([2],[1,3,4])
([2],[1,4,3])
([3],[1,2,4])
([3],[1,4,2])
([4],[1,2,3])
([4],[1,3,2])
([1,2],[3,4])
([1,3],[2,4])
([1,4],[2,3])
w dowolnej kolejności
Zad3
Napisać generator g(n) zwracający wszystkie przedstawienia (napisy)
liczby naturalnej n jako sumę niemalejącego ciągu liczb naturalnych dodatnich.
Efektem działania:
for s in g(5):print(s)
ma być
5
1+4
1+1+3
2+3
1+1+1+2
1+2+2
1+1+1+1+1
Wsk. Moim zdaniem warto napisać funkcję f(n,max),
zwracającą ciągi z dodatkowym warunkiem: wyraz maksymalny jest nie
większy od max. Wywołanie f(5,2) ma dać trzy ostatnie z wypisanych sum..
Download