N只猴子选猴王问题,编程的fortran语言,
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/05/06 09:53:37
N只猴子选猴王问题,编程的fortran语言,
方法是,它们围成一圈,从1到M连续报数.凡是报到M时,报该数的猴子就从圈中退出,然后剩下的猴子接着(从退出圈中的猴子后边开始)从1到M报数,直到只剩下一个猴子时,该猴子就是猴王
方法是,它们围成一圈,从1到M连续报数.凡是报到M时,报该数的猴子就从圈中退出,然后剩下的猴子接着(从退出圈中的猴子后边开始)从1到M报数,直到只剩下一个猴子时,该猴子就是猴王
上学期刚上过fortran,一样的题,貌似m,n换了个位置.
program exercise01
implicit none
integer m,n,err,i,temp,index,left,t,s,r
integer(2),allocatable:: a(:),b(:)
real(4) r1,r2,r3
character(1),allocatable:: name(:)
!n不能等于1,n在2到m间,m在3到14间
call random_seed()
call random_number(r1)
m=int(12*r1)+2
call random_number(r2)
n=int((m-3)*r2)+2
print *,'m=',m,'n=',n
print *
!确认可分配数组是否分配
allocate(name(m),stat=err)
if(err.ne.0) stop 'array allocation error'
allocate(a(m),stat=err)
if(err.ne.0) stop 'array allocation error'
allocate(b(m),stat=err)
if(err.ne.0) stop 'array allocation error'
a=(/1:m/)
!随机产生顺序,即随机产生相应于顺序的猴子名,用asc码表示
do i=m,1,-1
call random_number(r3)
temp=int((i-1)*r3)+1
name(m+1-i)=char(a(temp)+96)
a(temp:(m-1))=a((temp+1):m)
enddo
print *,'起始顺序:'
do i=1,m
write(*,'(a4$)') name(i)
enddo
print *
!报数过程,r为轮次,t为每轮剩余人数,s用于计数
r=0
do
r=r+1
t=s
s=0
print *
print *
write(*,'(a4,i4,a4)') '第',r,'轮'
if(r.eq.1) t=m
do i=1,t
if(mod(i,n).eq.0) then
s=s+1
name(s)=name(i)
write(*,'(a4$)') name(s)
endif
enddo
if(s.lt.n) exit
enddo
print *
print *
write(*,'(a8,a4)') '猴王为',name(1)
end program
program exercise01
implicit none
integer m,n,err,i,temp,index,left,t,s,r
integer(2),allocatable:: a(:),b(:)
real(4) r1,r2,r3
character(1),allocatable:: name(:)
!n不能等于1,n在2到m间,m在3到14间
call random_seed()
call random_number(r1)
m=int(12*r1)+2
call random_number(r2)
n=int((m-3)*r2)+2
print *,'m=',m,'n=',n
print *
!确认可分配数组是否分配
allocate(name(m),stat=err)
if(err.ne.0) stop 'array allocation error'
allocate(a(m),stat=err)
if(err.ne.0) stop 'array allocation error'
allocate(b(m),stat=err)
if(err.ne.0) stop 'array allocation error'
a=(/1:m/)
!随机产生顺序,即随机产生相应于顺序的猴子名,用asc码表示
do i=m,1,-1
call random_number(r3)
temp=int((i-1)*r3)+1
name(m+1-i)=char(a(temp)+96)
a(temp:(m-1))=a((temp+1):m)
enddo
print *,'起始顺序:'
do i=1,m
write(*,'(a4$)') name(i)
enddo
print *
!报数过程,r为轮次,t为每轮剩余人数,s用于计数
r=0
do
r=r+1
t=s
s=0
print *
print *
write(*,'(a4,i4,a4)') '第',r,'轮'
if(r.eq.1) t=m
do i=1,t
if(mod(i,n).eq.0) then
s=s+1
name(s)=name(i)
write(*,'(a4$)') name(s)
endif
enddo
if(s.lt.n) exit
enddo
print *
print *
write(*,'(a8,a4)') '猴王为',name(1)
end program
N只猴子选猴王问题,编程的fortran语言,
fortran语言编程中格式输入的问题
这是我用fortran语言编程中,出现的一个问题,
java语言编程 猴子吃桃问题
C语言编程猴子吃桃子问题
FORTRAN语言中open语句的问题
fortran语言问题
fortran语言 循环问题
C++语言编程问题.(猴子吃桃)
四道题(要算式)1.猴王分桃子,猴王拿一些桃子分给36只猴子,每碰到一只猴子,猴王就将所有桃子的一半给猴子,每只猴子也都
关于fortran语言中if语句的简单问题
有一只猴王老了,要选新的猴王,它让1000只猴子排成一排,每次让单数的猴子出列,最后 留下的那只猴子是猴王,请问那是第几