这是一道猴子选大王的题,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