【新人】c++写了一个约瑟夫环,运行不能QAQ

#include<iostream>usingnamespacestd;structNode{intdata;Node*next;};voidJosephus(intn,... #include<iostream>
using namespace std;

struct Node
{
int data;
Node *next;
};
void Josephus(int n,int k,int m)
//n表示总人数,k表示第一个开始报数的人,m表示出列者喊道的数
{
Node *p=NULL;//指向当前节点
Node *r=NULL;//指向前驱节点
Node* head=NULL;//指向头结点
int i=0;
//建立循环链表
for(i=0;i<n;i++)
{
Node* p=new Node;
p->data=i;
if(head==NULL)
head=p;
else
r->next=p;
r=p;
}
p->next=head;
p=head;
//找到第一个报数的人
for(i=0;i<k;i++)
{
r=p;
p=p->next;
}//跳出循环时,p指向第一个报数的人
//循环删除报到m的人
while(p->next!=p)
{
for(i=1;i<m;i++)
{
r=p;
p=p->next;
}//跳出循环时,p指向报到m的人
r->next=p->next;
cout<<"被删除的元素:"<<p->data<<endl;
p=r->next;
}
cout<<"最后被删除的元素是"<<p->data<<endl;
}

int main()
{
int n=5;
int k=3;
int m=2;
Josephus(n,k,m);
return 0;
}
展开
 我来答
淦海瑶s1
2012-06-27 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:758万
展开全部
逻辑上问题不少
建立链表的时候,
head=p;elser->next=p;r=p;这里r是null,那么next是没有的,所以先r赋值
Node* p=new Node;
p->data=0; //赋值头结点

head=p;

for(i=1;i<n;i++)
{
Node* p=new Node;
p->data=i;
head=p;
}
p->next=head; //首尾相连

//开始查找
while(p->next!=p)
{
for(i=0;i<m-1;i++)
p->next=p;
p->next=p->next->next; //删除m节点
p->next=p; //后移一个节点开始接着基数
}

思路是这样,链表那里的一些语法我记不很清楚了,可能有错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式