Task

Write a program that generates all   permutations   of   n   different objects.   (Practically numerals!)



Related tasks
 
   Find the missing permutation
   Permutations/Derangements



 The number of samples of size k from n objects.


With   combinations and permutations   generation tasks. 






 Order Unimportant

 Order Important


 Without replacement








(


n
k


)




=

n



C

k


=



n
(
n
−
1
)
…
(
n
−
k
+
1
)


k
(
k
−
1
)
…
1





{\displaystyle {\binom {n}{k}}=^{n}\operatorname {C} _{k}={\frac {n(n-1)\ldots (n-k+1)}{k(k-1)\dots 1}}}










n



P

k


=
n
⋅
(
n
−
1
)
⋅
(
n
−
2
)
⋯
(
n
−
k
+
1
)


{\displaystyle ^{n}\operatorname {P} _{k}=n\cdot (n-1)\cdot (n-2)\cdots (n-k+1)}




Task: Combinations

Task: Permutations


 With replacement








(



n
+
k
−
1

k


)




=

n
+
k
−
1



C

k


=



(
n
+
k
−
1
)
!


(
n
−
1
)
!
k
!





{\displaystyle {\binom {n+k-1}{k}}=^{n+k-1}\operatorname {C} _{k}={(n+k-1)! \over (n-1)!k!}}








n

k




{\displaystyle n^{k}}




Task: Combinations with repetitions

Task: Permutations with repetitions



PROC PrintArray(BYTE ARRAY a BYTE len)
  BYTE i
 
  FOR i=0 TO len-1
  DO
    PrintB(a(i))
  OD
  Print(" ")
RETURN
 
BYTE FUNC NextPermutation(BYTE ARRAY a BYTE len)
  BYTE i,j,k,tmp
 
  i=len-1
  WHILE i>0 AND a(i-1)>a(i)
  DO
    i==-1
  OD
 
  j=i
  k=len-1
  WHILE j<k
  DO
    tmp=a(j) a(j)=a(k) a(k)=tmp
    j==+1 k==-1
  OD
 
  IF i=0 THEN
    RETURN (0)
  FI
 
  j=i
  WHILE a(j)<a(i-1)
  DO
    j==+1
  OD
  tmp=a(i-1) a(i-1)=a(j) a(j)=tmp
RETURN (1)
 
PROC Main()
  DEFINE len="5"
  BYTE ARRAY a(len)
  BYTE RMARGIN=$53,oldRMARGIN
  BYTE i
 
  oldRMARGIN=RMARGIN
  RMARGIN=37 ;change right margin on the screen
 
  FOR i=0 TO len-1
  DO
    a(i)=i
  OD
 
  DO
    PrintArray(a,len)
  UNTIL NextPermutation(a,len)=0
  OD
 
  RMARGIN=oldRMARGIN ;restore right margin on the screen
RETURN