我正在尝试在Fortran中编写一个代码,生成给定以下输入1,2,3生成重复的排列:
111 112 113 121 122 123 。 。
显然会有3 ^ 3 = 27(n ^ k)组合。有谁知道生成这样的东西的算法?
答案 0 :(得分:3)
这是一个解决方案:
module perm_mod
contains
subroutine print_permutations(A)
implicit none
integer,intent(in) :: A(:)
integer :: i, j, l, remainder
integer :: idx(size(A,1)), stride(size(A,1))
l = size(A,1)
stride(1) = 1
do i=2,l
stride(i) = stride(i-1)*l
enddo ! i
do i=0,l**l-1
remainder = i
do j=l,1,-1
idx(j) = remainder / stride(j)
remainder = remainder - idx(j)*stride(j)
enddo ! j
print *,A(idx+1)
enddo ! i
end subroutine
end module
program perm
use perm_mod
implicit none
integer,parameter :: A(3) = [ 1, 2, 3 ]
call print_permutations(A)
end program