题9.6:13个人围成一圈, 从第1个人开始顺序报号1, 2, 3。凡报到3者退出圈子。找出最后 留在圈子中的人原来的序号。要求用链表实现。
题目
本题是谭浩强《C程序设计课后习题》题9.6。
题目:
13个人围成一圈, 从第1个人开始顺序报号1, 2, 3。凡报到3者退出圈子。找出最后
留在圈子中的人原来的序号。要求用链表实现。
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj
一、解题思路
思路:
创建一个环形链表,给链表中的每一个节点从1~13编号,然后开始淘汰过程,对于淘汰的节点,序号置为0,淘汰完成之后,找到序号不为0的即为最后留下的。
二、代码部分
1.引入库
代码如下(示例):
#include<stdio.h>
2.主函数部分
代码如下(示例):
#define NUM 13
//定义节点
typedef struct people
{int num;struct people* next;
}people;
int main()
{people arr[NUM];//定义包含13个人的数据//建立环状链表people* head = arr;for (int i = 0; i < NUM; i++){head->num = i + 1;head->next = &arr[i + 1];head = head->next;}//构成环状结构arr[NUM - 1].next = arr;//开始报数int count = NUM;//从1开始报数int i = 1;head = arr;while (count > 1){if (head->num == 0)//判断是否已退出{head = head->next;//跳过此人continue;}if (i == 3){printf("第%d个人退出\n", head->num);head->num = 0;count--;}head = head->next;i++;//继续报号if (i > 3)i = 1;//判断报号是否大于3}while (head->num == 0)//找出编号不为0的人{head = head->next;if (head->num != 0){printf("没有退出的人为:%d\n", head->num);break;}}return 0;
}
三、执行结果
输出:
第3个人退出
第6个人退出
第9个人退出
第12个人退出
第2个人退出
第7个人退出
第11个人退出
第4个人退出
第10个人退出
第5个人退出
第1个人退出
第8个人退出
没有退出的人为:13
题9.6:13个人围成一圈, 从第1个人开始顺序报号1, 2, 3。凡报到3者退出圈子。找出最后 留在圈子中的人原来的序号。要求用链表实现。相关推荐
- 海大910-2014年编程题1:13个人围成一圈, 从第1个人开始顺序报号1, 2, 3。凡报到3者退出圈子。找出最后 留在圈子中的人原来的序号。要求用链表实现。(15分)
题目 本题是2014年中国海洋大学研究生入学考试910高级程序设计程序设计题第1题. 题目: 13个人围成一圈, 从第1个人开始顺序报号1, 2, 3.凡报到3者退出圈子.找出最后 留在圈子中的人原来 ...
- (链表解决)13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子,找出最后留在圈子里的人的序号。
题目 13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子.找出最后留在圈子里的人的序号. 代码 #include <stdio.h> #define n 13 ty ...
- 13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。
13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子.找出最后留在圈子中的人原来的序号.要求用链表实现. #include <stdio.h> #include < ...
- c语言】13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号
题目(摘自谭浩强的C语言):有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那个人. 解法思路:首先不要将思维局限在一圈人,可以先将n个 ...
- 有n个人,顺序排列, 并首尾相连围成一圈。从第一个人开始报数(从1到4),凡报到4的人退出圈子+扩展版本
https://blog.csdn.net/qq_44037213/article/details/106551760?fps=1&locationNum=2 有n个人(n<=1000) ...
- 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。
[绕圈报数] 1130 更新 ======== 一般化情况 13个人围成一圈,从第1个人开始顺序报号1.2.3,凡报到3的人退出圈子.找出最后留在圈子里的人原来的序号. 输出提示 "出圈成员 ...
- 13个人围成一圈,从第1个人开始顺序报号1,2,3。 凡报到3者退出圈子
#include <stdio.h> #include <stdlib.h> #define N 13 /* 13个人围成一圈,从第1个人开始顺序报号1,2,3. 凡报到3者退 ...
- 7-5 模拟报数游戏(约瑟夫环问题):有n个人围成一圈从1开始按顺序编号从第一个人开始从1到k报数,报到k的人退出圈子;然后圈子缩小,下一个人继续,问最后留下的是第几号(只留1 人)。要求定义函数
学习记录与分享 PTA程序设计类教学平台-Python作业二(循环结构程序设计) 题目 7-5 模拟报数游戏(约瑟夫环问题) 有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k报数,报到k的 ...
- C语言 n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,计算最后留下的是最初第几号人
#include <stdio.h> int main(){int i,k,m,n,num[50],*p;printf("几个人围成一圈?");scanf(" ...
- 有n个人围成一圈,顺序排号,从第一个人开始报数(1-3报数),凡是报数为3的人退出圈子,问最后留下的人原来的编号是多少?
有n个人围成一圈,顺序排号,从第一个人开始报数(1-3报数),凡是报数为3的人退出圈子,问最后留下的人原来的编号是多少? 花了半个下午搞出来的代码,调试了一会,一切正常,感觉还不错! '''解题思路: ...
最新文章
- 区块链隐私:交易还是计算?
- Altium designer中元器件重新编号,会残留之前的编号,浅色有括号——消除办法
- XML学习笔记01【xml_基础、xml_约束】
- VDP文件级恢复需要在用VDP备份的机器上浏览
- qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)
- Swift封装 滑出式导航栏
- ios测试续航软件,5款iPhone测试iOS电池续航:结果这样 你还升级吗
- asp 退出登录修改cookie能进入后台_某logCMS的代码审计:越权到后台getshell
- 传统语音识别GMM和HMM
- 用java编写一个学生类
- PLC对接MES、PLC数据上报、PLC之间通讯
- [BZOJ4816][SDOI2017]数字表格(反演)
- Factorization Machines 论文翻译
- 解决RabbitMQ无法使用guest用户登录问题
- 谁知道qq会员怎么退款呢
- 基于CEP的量化交易平台建设
- 教程:客制化您的输入法
- 功能测试报告怎么写?进来看标准模板
- 几个简单的shell编程题
- 苹果语音备忘录怎么改名字_苹果手机语音备忘录怎么恢复?教你在手机上直接操作...