主题:【求助】围圈报数出局问题(链表方面)
program experi
implicit none
type count
integer ::x
type(count),pointer::next
end type count
type (count), pointer :: root,current,jump
integer , parameter :: num=30
integer , parameter :: out=8
integer :: i
allocate(root)
root%x=1
allocate(root%next)
root=>root%next
allocate(current)
do i=1,num-1
current%x=i
allocate(current%next)
current=>current%next
end do
current%x=num
current%next=>root
allocate(jump)
do
do i=1,out-1
jump=>jump%next
jump%next=>current%next
end do
jump=>current%next
current=>jump%next
print *,jump%x
if(jump%x==current%x)exit
end do
end program experi
这是一道三十个人围成一圈报数报到8就出局,直到最后只剩一个人,要求出局的顺序
上面的代码是我编的,但是一直有错,调试不出来
同学有这么编的(如下),但是我看着总觉得有些地方不完善(不过这个可以执行出来),求高人指点这两个程序应该怎么改~~或者第二个是已经没问题的?
program count
implicit none
type people
integer :: a
type(people) , pointer :: next
end type people
integer , parameter :: peoplenum = 30
integer , parameter :: cutout = 8
integer :: i
type(people) , pointer :: root, current
type(people) , pointer :: jump
allocate(root)
current => root
do i = 1, peoplenum - 1
current%a = i
allocate(current%next)
current => current%next
end do
current%a = peoplenum
current%next => root
current => root
do
do i = 1, cutout - 2
current => current%next
end do
[color=FF0000]jump => current%next
current%next => jump%next
current => current%next[/color]
print *, jump%a
if(current%a == jump%a) exit
end do
end program count
主要有两点不明白,1,三个自定义类型变量的层次结构,例如root为什么没(轮询)赋值?
2,红字处没明白,我把最后两句合成current=>jump%next程序运行起来就循环个没完了~~我知道我很菜,怎么都理解不了呢~~求助求助ing~~~
implicit none
type count
integer ::x
type(count),pointer::next
end type count
type (count), pointer :: root,current,jump
integer , parameter :: num=30
integer , parameter :: out=8
integer :: i
allocate(root)
root%x=1
allocate(root%next)
root=>root%next
allocate(current)
do i=1,num-1
current%x=i
allocate(current%next)
current=>current%next
end do
current%x=num
current%next=>root
allocate(jump)
do
do i=1,out-1
jump=>jump%next
jump%next=>current%next
end do
jump=>current%next
current=>jump%next
print *,jump%x
if(jump%x==current%x)exit
end do
end program experi
这是一道三十个人围成一圈报数报到8就出局,直到最后只剩一个人,要求出局的顺序
上面的代码是我编的,但是一直有错,调试不出来
同学有这么编的(如下),但是我看着总觉得有些地方不完善(不过这个可以执行出来),求高人指点这两个程序应该怎么改~~或者第二个是已经没问题的?
program count
implicit none
type people
integer :: a
type(people) , pointer :: next
end type people
integer , parameter :: peoplenum = 30
integer , parameter :: cutout = 8
integer :: i
type(people) , pointer :: root, current
type(people) , pointer :: jump
allocate(root)
current => root
do i = 1, peoplenum - 1
current%a = i
allocate(current%next)
current => current%next
end do
current%a = peoplenum
current%next => root
current => root
do
do i = 1, cutout - 2
current => current%next
end do
[color=FF0000]jump => current%next
current%next => jump%next
current => current%next[/color]
print *, jump%a
if(current%a == jump%a) exit
end do
end program count
主要有两点不明白,1,三个自定义类型变量的层次结构,例如root为什么没(轮询)赋值?
2,红字处没明白,我把最后两句合成current=>jump%next程序运行起来就循环个没完了~~我知道我很菜,怎么都理解不了呢~~求助求助ing~~~