#include"stdio.h"
#define n 13
struct person{
int number;
int nextp;//指向下一个数
}link[n+1];//创建存放数据的数组
main()
{
int i,count,h;
for(i=1;i<=n;i++){
if(i==n)link[i].nextp=1;//当最后一个数链接到第一个,形成一个环
else
link[i].nextp=i+1;//下一个数字是当前i的下一位,i+1
link[i].number=i;//当前数字是i
}
printf("\n");
count=0;//count赋储值为0,避免乱码
h=n;//h等于n的个数,后面数组下标增加到n
printf("sequen thast person:\n");
while(count<n-1)//出圈人数小于总人数,否则结束
{
i=0;
while(i!=3)
{
h=link[h].nextp;//i不为3时候循环继续
if(link[h].number!=0)
i++;//i继续向后增加
}
printf("%4d",link[h].number);//输出出圈数
link[h].number=0;//如果出圈把这个数设置为0
count++;//每次出圈一次,count增加1
}
printf("\nthe last one is");
for(i=1;i<=n;i++)//遍历数组,检查还没有出圈的数
if(link[i].number)//如果还有没有出圈的,输出该数
printf("%3d",link[i].number);//输出最后一个数字
printf("\n");
return 0;
}
13人围成一圈,从第一个人开始顺序报号1,2,3。报到3退出。找出最后留在圈子中的人原来的序号。用链表实现。
最新推荐文章于 2024-08-12 15:37:57 发布