/* 13个人围成一圈, 从第1个人开始顺序报号1,2,3。 凡报到3者退出圈子。 找出最后留在圈子中的人原来的序号。 要求用链表实现 */ #include<stdio.h> #define NUM 13 //建立链表 typedef struct people{ int num; struct people *next; }people; int main() { int count = NUM; people p[NUM]; people *head; head = p;//自定义头节点 for(int i = 0;i<NUM;i++)//对链表进行赋值 { head->num = i+1; head->next = &p[i+1]; head = head->next; } p[NUM-1].next = p;//构成环形列表 int i = 1; head = p; while(count>1)//count的值表示的是没被淘汰的个数 { //被淘汰的节点赋值为0,if的目的是跳过被淘汰的节点 if(head->num == 0) { head = head->next; continue; } if(i == 3) { //被淘汰的节点,num置为0 printf("第 %d 位置被淘汰\n", head->num); head->num = 0; count--; } head = head->next;//让head后移继续判断 i++;//模拟循环报数 if (i > 3)//当i的值超过3之后开始重新对i循环 { i = 1; } } printf("--------------\n"); while (head->num == 0)//此时节点里只有一个不为零的数 { //非0节点即为最后留下的 head = head->next; if (head->num != 0) { printf("留到最后的是 %d \n", head->num); } } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复