M只猴子选大王

来源:百度知道 编辑:UC知道 时间:2024/07/05 07:13:41
M只猴子选大王,方法:所有猴子按1……M编号围成一圈,从第一个开始按顺序1,2……N报数,报到N的退出,如此循环,直到最后一只,那只就是猴王。

数据结构课程设计啊,用C做,急急急

顺便帮你把语句也解释好算了
#include <stdio.h>
#include <stdlib.h>
#define n 19
#define m 4

typedef struct monkey
{
int num;
struct monkey *next;
} Monkey,*LINK;

void main()
{
LINK p,head,p2;
int i;
head=p=p2=(LINK)malloc(sizeof(Monkey));//三个指针指向同一块内存

for(i=1;i<n;i++)
{
p=(LINK)malloc(sizeof(Monkey));
p2->next=p;
p2=p;
}

p2->next=head;//把链表的首尾相连
p=head;//p指向了第一个结点

printf("对猴子进行编号!\n");
for(i=1;i<=n;i++)
{
p->num=i;//从第一个结点到最后一个结点依次给猴子编号
printf("%d号猴子:%d\n",p->num,p->num);
p=p->next;
}//循环结束,p指向了最后一个结点

i=0;
p=head;//再把p指向第一个结点

while(1)
{
i++;
printf("%d号猴子报:%d\n",p->num,i);
if(p->next==p)
break;//此为while循环的出口

if(i==m)//if语句中是删除结点的过程