猴子选大王链表实现

有M只猴子围成一圈,每只各一个从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从... 有M只猴子围成一圈,每只各一个从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M、N,编程计算哪一个编号的猴子成为大王 展开
 我来答
匿名用户
推荐于2017-11-26
展开全部
# include<stdio.h>
# include<stdlib.h>
struct monkey
{
int number;
struct monkey *next;
};
struct monkey *p,*q,*head=NULL,*temp;
struct monkey *add(struct monkey *head,int end)
{ int i=1;
while(i<=end) //END代表猴子总数
{
q=(struct monkey *)malloc(sizeof(struct monkey));
q->number=i;//为每个猴子编一个号码
if(head==NULL)
{
head=p=q;
}
else
if(i==end)
{
p->next=q;
q->next=head;
}
p->next=q;
p=q;
i++;
}
return head;
}
struct monkey *game(struct monkey *head,int out,int end)
{
p=head; int i=1;
while(p->next!=p)
{
for(i=1;i<out-1;i++)
{
p=p->next;
// i+=out;//OUT代表猴子退出的数
}

/*if(p==head) //如果是头结点HEAD指向下一个值
{
temp=head;
head=temp->next;
free(temp);//释放头结点
}*/

temp=p->next; //删掉p->next
p->next=temp->next;
p=p->next;
free(temp);//删掉p->next后并释放他
}
printf("%d",p->number);
return NULL;
}
void main()
{
int n,m;
printf("\n请输入猴子个数\n");
scanf("%d",&n);
printf("\n请输入退出去的数\n");
scanf("%d",&m);
head=add(head,n);
head=game(head,m,n);
}
yagamai1999
2018-04-19
知道答主
回答量:2
采纳率:0%
帮助的人:1739
展开全部
运行有很多错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式