主题:求助!!!
这是一道猴子选大王的题,m只猴子数数,能被n整除的留下(0<n<m<15),不足n只时,第一只为大王。m,n,名字随机产生。
产生m,n和名字的部分没问题,最后一个子程序出现了问题(数组k2,k3得到的值不是已经产生的name值),求高手解释!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine get_m_n(m,n)
implicit none
integer m,n
real a,b,c,d
integer,allocatable ::name(:)
call random_seed()
call random_number(a)
call random_number(b)
m=2+int(a*13)
n=1+int(b*(m-1))
print*,'There are',m,'monkeys,their names are',n,'.'
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine name(m)
implicit none
integer j,a,mark
integer m,name1(m)
real r
! integer name
call random_seed()
do j=1,m
mark=0
do while (mark==0)
call random_number(r)
name1(j)=int(25*r)+65
mark=1
do a=1,j-1
if(name1(j)==name1(a)) mark=0
enddo
enddo
enddo
do j=1,m-1
write(*,"(a2,\)") char(name1(j))
enddo
write(*,"(a2)") char(name1(m))
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine king(m,n,name)
implicit none
integer i,int,k,mark2,m,n,king1
integer name(m),k2(m),k3(m)
k2=name
k3=name
do while(mark2==0)
do i=1,m
do k=1,m
if(mod(i,n)==0)then
k3(k)=k2(i)
int=int+1
endif
enddo
enddo
if(int<=n)then
king1=k3(1)
mark2=1
endif
if(int>n) then
k2=k3
mark2=0
int=0
endif
enddo
print*,king1
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program kingchoosing
implicit none
integer m,n,king1
integer king
integer name
call get_m_n(m,n)
call name(m)
call king(m,n,name)
write(*,"(a2)") char(king1)
end program kingchoosing