/* 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语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:788 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:530 |
C语言训练-求车速 (C语言代码)浏览:808 |
【密码】 (C语言代码)浏览:501 |
WU-玉龙学长买雪糕 (C++代码)浏览:1107 |
2005年春浙江省计算机等级考试二级C 编程题(3) (C语言描述—高大上之利用二维指针生成二维数组)浏览:1322 |
图形输出 (Java代码)浏览:455 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:2007 |
Manchester-蛇行矩阵,不需要数组,四个变量,解决问题浏览:5988 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1037 |