约瑟夫问题,总共n个人,从第一个开始数,数到第m个,第m个推出,接着继续数,一直到最后一个为止,程序如下,当n=8,m=4,结果正确,但n=8,m=1,或n=8,m=2时结果不对,请高手帮帮忙,是出什么问题。个人觉得算法没问题呀!
#include <iostream.h>
typedef struct Node
{
int data;
struct Node* next;
} *Pointer;
void Create(Pointer& head,int k)
{
Pointer p,q;
head=new Node;
p=head;
head->data=1;
for(int i=2;i<=k;i++)
{
q=new Node;
q->data=i;
p->next=q;
p=q;
}
p->next=head;
}
void Remove(Pointer t)
{
Pointer r;
r=t->next;
t->next=r->next;
cout<<r->data<<endl;
delete(r);
}
void main()
{
int m,n;
cout<<"请输入m,n"<<endl;
cin>>m>>n;
cout<<"编号为:";
for(int i=1;i<=n;i++)
cout<<i;
cout<<endl;
Pointer r;
Create(r,n);
int k=1;
while(r->next!=r)
{
r=r->next;
k=k+1;
if(k==m-1)
{
Remove(r);
k=0;
}
}
cout<<r->data<<endl;
}
[求助]约瑟夫程序问题