Генератор перестановок |
||
Перестановка 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 |
||