猴子选大王,C语言描述 请相信解释我的代码!猴子选大王问题描述:一堆猴子都有编号,编号是1,2,3….m,这群猴子(m个)按照1-m的顺序围坐一圈,从1开始数,每数到第N个,该猴子就要离开此圈,这

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 07:11:47
猴子选大王,C语言描述 请相信解释我的代码!猴子选大王问题描述:一堆猴子都有编号,编号是1,2,3….m,这群猴子(m个)按照1-m的顺序围坐一圈,从1开始数,每数到第N个,该猴子就要离开此圈,这

猴子选大王,C语言描述 请相信解释我的代码!猴子选大王问题描述:一堆猴子都有编号,编号是1,2,3….m,这群猴子(m个)按照1-m的顺序围坐一圈,从1开始数,每数到第N个,该猴子就要离开此圈,这
猴子选大王,C语言描述 请相信解释我的代码!
猴子选大王问题描述:一堆猴子都有编号,编号是1,2,3….m,这群猴子(m个)按照1-m的顺序围坐一圈,从1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王.
输入数据:输入m,n.(m,n为整数,且nnum = 1;
q=L;
for(i = 2; i num = i;
q->next=p;
q=p;
}
q->next = L;
return L;
}
void ListDelete_L(LinkList L,int n)
{
LinkList p,q;
p=L;
int j=1;
while(p->next!=p)
{
while(j!=n-1)
{
p=p->next;
j++;
}
q=p->next;
p->next=p->next->next;
printf("%d",q->num);
free(q);
j=0;
}
printf("%d",p->num);
free(p);
}
int main()
{
LinkList L=NULL;
int n,m,e=0;
printf("请输入猴子个数:");
scanf("%d",&m);
printf("请输入n值:");
scanf("%d",&n);
if(m

猴子选大王,C语言描述 请相信解释我的代码!猴子选大王问题描述:一堆猴子都有编号,编号是1,2,3….m,这群猴子(m个)按照1-m的顺序围坐一圈,从1开始数,每数到第N个,该猴子就要离开此圈,这
给你原文做了注释.
#include
#include
typedef struct LNode
{
int num;
struct LNode *next;
}LNode,*LinkList; //定义结点
LinkList InitList(LinkList L,int n) //初始化循环链表
{
LinkList p,q;
int i;
L = (LinkList)malloc(sizeof(LNode)); //头结点
L->num = 1; //一号猴子
q=L;
for(i = 2; i num = i;
q->next=p;
q=p;
}
q->next = L; //使链表循环起来
return L;
}
void ListDelete_L(LinkList L,int n)
{
LinkList p,q;
int j=1; //j为计数器
p=L;
while(p->next!=p) //p->next=p时是只剩一个结点.
{
while(j!=n-1) //当j=n-1时应该将该结点的下一个结点删除.当就j!=n-1时就应该指针向后移,同时计数器加一
{
p=p->next;
j++;
}
q=p->next; //q即为被点到的猴子
p->next=p->next->next; //删除q结点
printf("%d\n",q->num);
free(q);//释放
j=0; //计数器清零,重新开始计数
}
printf("%d",p->num);//此时的结点就是大王
free(p);
}
int main()
{
LinkList L=NULL;
int n,m,e=0;
printf("请输入猴子个数:");
scanf("%d",&m);
printf("请输入n值:");
scanf("%d",&n);
if(m