猴子选大王链表实现
有M只猴子围成一圈,每只各一个从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从...
有M只猴子围成一圈,每只各一个从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M、N,编程计算哪一个编号的猴子成为大王
展开
2个回答
推荐于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);
}
# 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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询