Генератор перестановок

 

Перестановка 1234...n обозначается p=p1p2...pn

Просматриваем числа p1...pm с конца и ищем элемент, для которого pi<pi+1. Если такого элемента нет, то заканчиваем работу и  элементы m,m-1,...1 дают необходимую перестановку.  Если элемент есть, то возникает последовательность чисел

 pi+1>pi+2>..pm

Найдем из этих чисел первое pj>pi  и обменяем их местами. Т.е. если pj>pi то swap pi,pj. Затем переставляем местами попарно pi+1 c pm pi+2 c pm-1 pi+3 c pm-2

Алгоритм

10 print "Введи количество чисел"

20 input "N="; N

30 dim a(n)

40 for i=1 to N

50 a(i)=i

60 next

70 m=n

80 s=a(1)

90 for i=1 to m-1

100 a(i)=a(i+1)

110 next

120 a(m)=s

130 if m=a(m) then 140

132 for i=1 to n

133 print a(i);

134 next

135 print

136 goto 70

140 if m=2 then goto 170

150 m=m-1

160 goto 80

170 end

2)второй способ -блок-схема

                          открываем список

                          1 2 3 4 5 ....n

                               m=n

                       производим вращение

                       пeрвых m чисел      123->231

                               Im=m?->да m=2?->нет m=m-1->на вращение

                                 !нет     !да   

                                 Y        Y

                      заносим в список                  конец

                      и на m=n

 

Алгоритм

10 input Введи количество чисел";N

30 dim a(n)

40 for i=1 to N

50 a(i)=i

60 next

70 for i=n to 2 step -1

80 if a(i-1)<a(i then m=i-1:i=2:goto 110

90 next

100 ed

110 for j=n to m+1 step -1

120 if a(j)>a(m) then swap a(j),a(m):j=m+1:goto 140

130 next

140 for i=1 to (n-m+1)/2

150 swap a(m+i),a(n+1-i)

160 next

170 for i=1 to n

180 print a(i);

190 next

195 print

200 goto 70