作者charlesdc (MoOn)
看板Fortran
标题Re: [问题] 排列组合的种类
时间Sat Apr 14 13:43:40 2012
※ 引述《laa7352 (Laa)》之铭言:
: ※ 引述《magaiml (XD)》之铭言:
: : 想请教一下这类型的问题如何写出来?
: : 就是排列组合的种类
: : ex 从 1 2 3 4 5 数字中取出3个来排列
: : 5C3=10种
: : 我个人是用树状图的概念写 如
: : 1→2→3
: : ↘4
: : ↘5
: : ↘3→4
: : ↘5
: : ↘4→5
: : 2→3→4
: : ↘5
: : ↘4→5
: : 3→4→5
: : 该如何写呢各位?
: : 麻烦一下各位了。
这个范例是我之前写卫星组合时用的
你再拿你要的地方再改吧
我也懒得切出来><
implicit none
integer*4 m,n,a
integer*4,allocatable :: num(:),sate(:)
real*8,allocatable :: f(:,:)
open(11,file="input.txt",status="old"); open(12,file="output.txt")
write(*,*)"输入卫星各数与选取各数"
read(*,*)m,n
allocate(num(0:n)); allocate(f(m,7)); allocate(sate(m))
num=0; f=0; sate=0
do a=1,m
read(11,*)sate(a),f(a,:)
end do
call sort(m,n,num,1,sate,f)
end
recursive subroutine sort(up,low,num,num1,sate,f)
implicit none
integer*4 up,low,num1,i,num(0:low),sate(up)
real*8 f(up,7)
100 format(i2,',',3(f19.8,','),2(f14.3,','),f12.8,',',f24.20)
if (num1-1==low) then
do i=1,low
write(12,100)sate(num(i)),f(num(i),1:7)
end do
else
do i=num1,up
num(num1)=i
if (num(num1-1)>=num(num1)) then
cycle
else
call sort(up,low,num,num1+1,sate,f)
end if
end do
end if
end subroutine sort
变数命名的方式就不要太在意了
你也知道作业就是让自已看懂的东东......
有问题就自己想吧
我也忘了我之前是怎麽写的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.166.97.173