#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Monkey)
struct Monkey
{
int age;
Monkey *next;
};
int age0[20];
Monkey *Create(int n)//建立循环链表
{
Monkey *h,*p;
int i;
h = new Monkey;
p=h;
for(i=1;i<=n;i++)
{
printf("请输入第%d号猴子的年龄:",i);
scanf("%d",&age0[i]);
p->age=age0[i];
if(i<n)
{
p->next=new Monkey;
p=p->next;
}
}
p->next=h;
return h;
}
void Out(Monkey *h,int i,int d,int num)//猴子出圈
{
Monkey *p,*q;
int k,i1,i2;
p=h;
for(q=h;q->next!=h;q=q->next);
for(k=1;k<i;k++)
{
q=p;
p=p->next;
}
while(p!=p->next)
{
for(k=1;k<d;k++)
{
q=p;
p=p->next;
}
// printf("出圈的猴子年龄为:%d\n",p->age);
q->next=p->next;
delete p;
p=NULL;
p=q->next;
}
for(i1=1;i1<=num;i1++)
{
if(p->age==age0[i1])
{
i2=i1;
}
}
printf("猴王为编号为%d年龄为%d的猴子\n",i2,p->age);
delete p;
p=NULL;
}
int main()
{
Monkey *head;
int num,year,beg=1;
int i,temp;
printf("请输入总的猴子数:");
scanf("%d",&num);
head=Create(num);
// ShowList(head);
temp=age0[1];
for(i=1;i<=num;i++)
{
if(temp>age0[i])
{
temp=age0[i];
}
}
for(i=1;i<=num;i++)
{
if(temp==age0[i])
{
beg=i;
}
}
printf("最年幼的猴子位于第%d号\n",beg);
printf("新年公元号为:");
scanf("%d",&year);
Out(head,beg,year,num);
}
流程图:
运行结果:
就酱~哪里不懂可以留言问~
本文介绍了一个使用C语言实现的猴子出圈问题解决方案。通过创建循环链表来模拟猴子围成一圈的情况,并利用特定规则让猴子依次出圈,直至找到最后剩下的猴王。文中包含了完整的代码实现及运行结果。
代码+流程图+运行结果&spm=1001.2101.3001.5002&articleId=78442363&d=1&t=3&u=5a6fca4ad8a647baac0b7fae7a58d6d0)
7293

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



