一群猴子有50只,坐在一起选猴王,每只猴子都有一个编号1~50。从1号猴子开始报号,报到7号则退出;下只猴子继续从1开始报,依次循环,则最后的一只猴子为猴王。试求出这只猴子的编号。
#include<stdio.h>
#include<conio.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}listnode,*linklist;
linklist creater()
{
int i;
linklist head,r;
listnode *p;
head=NULL;
r=NULL;
for(i=1;i<=50;i++)
{
p=(listnode *)malloc(sizeof(listnode));
p->data=i;
if(head==NULL)
head=p;
else
r->next=p;
r=p;
}
r->next=head;
return(head);
}
void main()
{
int i;
linklist p,r,s;
linklist newlist=creater();
p=newlist;
while(p->next!=p)
{
for(i=1;i<7;i++)
{
if(i==6)r=p;
p=p->next;
}
s=p->next;
printf("delete moneky:%d\n",p->data);
free(p);
r->next=s;
p=s;
}
printf("the kingdow of moneky:%d\n",p->data);
getch();
}
本文通过C语言实现了一个有趣的算法问题:一群编号为1至50的猴子通过报数方式选出猴王。从1号猴子开始,每报到7号的猴子将被淘汰,直至最后剩下一只猴子成为猴王。代码详细展示了使用链表来模拟这一过程。
2036

被折叠的 条评论
为什么被折叠?



