【求助】猴子选大王 代码中的一个问题
一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王//link.h
template <class T>
struct node{
T data;
node<T> *next;
};
//猴子选大王.cpp
#include<iostream.h>
#include"link.h"//引入头文件
void init_list(node<int> *first,int m)
{
//生成m个节点的循环链表
node<int> *p,*q;
p=first;
p->data=1;
for(int i=2;i<=m;i++){
q=new node<int>;
p->next=q;
p=q;
p->data=i;
p->next=first;
}
}
void main()
{
int m,n,l;
cout<<"请输入猴子的个数:";
cin>>m;
cout<<"请输入N:";
cin>>n;
node<int> *first;
first=new node<int>;
first->next=first;
init_list(first,m);
node<int> *p,*q;
q=new node<int>;
p=new node<int>;
p=first;
while(p->next!=p)
{
//循环的终止条件为链表只剩一个节点
for(int i=1;i<n;i++)
{
if(i==n-1) //就是这里,为什么不是i==n呢?高手指点下!!!!谢谢!!!
q=p;
p=p->next;
}
p=p->next;
q->next=p;
}
cout<<"成为大王的猴子为第"<<p->data<<"个"<<endl;
}