有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位

如题,相信很多人都和我一样,当时看到根本不知道从何下手.那么我们先不看代码,画图来进行分析


如图,假设有10个人,他们的序号为1-10,而从1-3开始报数,报到3就退出.


这里9实际上也删除了,图没有画好

靠近尾部,那么报数将会重头开始继续报


重头开始报数,直到报到只剩下最后一个人的时候,那么这个人就是我们要找的那个了

那么大致的操作我们知道了,接下来就是思路的问题,下面是要满足的条件,或者说,要注意的事项

  1. 首先,得有一个排号的操作
  2. 再者,每一次需要在排完一遍后重复报数,直到只剩下一个人
  3. 其次,报数报到3后,应该要重头开始报数
  4. 再者,退出的人,应该要让我们知道
  5. 剩余的人数,要始终大于1,如果小于1,那么就不用再继续了

接下来,大致的思路也有了,那就是我们的代码如何了

原版

#include<stdio.h>
#define N 50void main()
{int group[N];int totalNum = 0, restNum = 0, count = 0, roundcount = 0; scanf_s("%d", &totalNum);//排号操作for (int i = 0; i < totalNum; i++){group[i] = i + 1;}restNum = totalNum;//只要不只剩下一个人,那么就重复报数while (restNum>1){roundcount = 0;//遍历整个数组,重复报数,直到一轮结束while (roundcount < totalNum){if (group[roundcount]!=0){count++;//报到3重头报数if (count == 3){group[roundcount] = 0;//退出的人以0为标识restNum--;count = 0;}             }roundcount++;}}for (int i = 0; i < totalNum; i++){if (group[i]!=0){printf("%d", group[i]);break;}}
}

加入指针

#include<stdio.h>
#define N 50void main()
{int peopleNum[N];int totalNum = 0;//总人数int restNum = 0;//剩余人数int count = 0;//报的数scanf_s("%d", &totalNum);for (int i = 0; i < totalNum; i++){peopleNum[i] = i + 1;//赋予每个人编号}restNum = totalNum;//一开始全部人都在while (restNum>1)//只要不是剩下一个人{int* curNum = peopleNum;//每次报完一轮数,再报第二轮要重头开始while (curNum<peopleNum+totalNum)//没有报完一轮,就继续报数,让人滚蛋{if (*curNum!=0)//设0为被剔除人的标识{count++;if (count==3)//报到3的人滚蛋{*curNum = 0;//标识滚蛋的人count = 1;//从1开始重新1,2,3报数restNum--;//让一个人滚了,所以剩余的人数少一个}}curNum++;}}for (int i = 0; i < totalNum; i++){if (peopleNum[i]!=0)//只要不是滚出去的人,也就是留在场上的人,其实只会有一个{printf("The last one is %d", peopleNum[i]);break;}}
}

相信这样讲解,像我一样脑子转不过弯来的兄弟,应该也能理解的了这样一道题了

如有不足,还望指正

详细讲解C语言经典例题:有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位相关推荐

  1. c/c++ 有n个人围成一圈, 顺序排号。从第1个人开始报数(从1~3报数), 凡报到3的人退出圈子, 问最后留下的人原来排在第几号。

    解题思路的重要性显现出来了 比如这个题 n个人肯定是要用数组 毋庸置疑 那么报数怎么实现呢 可以设置一个循环变量 让他从0开始循环 当等于3 的时候 就归零 还有 n个人 肯定需要很多圈报数 这个很多 ...

  2. 题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成

    题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成 #include <stdio.h> in ...

  3. 有n个人,顺序排列, 并首尾相连围成一圈。从第一个人开始报数(从1到4),凡报到4的人退出圈子+扩展版本

    https://blog.csdn.net/qq_44037213/article/details/106551760?fps=1&locationNum=2 有n个人(n<=1000) ...

  4. ACMNO.38 C语言-报数 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

    题目描述 有n人围成一圈,顺序排号. 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子.`在这里插入代码片` 问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样 ...

  5. python n个人围成一圈,Python练习代码实例69-有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的...

    Python 练习实例69 题目:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 程序分析:无. 程序源代码:#!/usr/bi ...

  6. (C语言)有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

    题目描述 有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样例输入 3 样例输出 2 ...

  7. 约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。...

    首先,我最大的学习来源不是百度而是我群友~~在这里表白一波我热爱学习的群友们! 然后今天群里突然有人提出了题目的这个问题: 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人 ...

  8. 习题 6.5 有n个人围成一圈,顺序排号。从第1个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。

    C++程序设计(第三版) 谭浩强 习题6.5 个人设计 习题 6.5 有n个人围成一圈,顺序排号.从第1个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号. 代码块: # ...

  9. 题目: 有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1到 3报数),凡报到 3的 人退出圈子,问最后留下的是原来第几号的那位。(模拟)

    题目: 有 n个人围成一圈,顺序排号.从第一个人开始报数(从 1到 3报数),凡报到 3的 人退出圈子,问最后留下的是原来第几号的那位. 思路: 题目说是排成一圈,可以看成一个数组的排列.用i从下标为 ...

最新文章

  1. 我用Java+SeimiCrawler+Redis+ES+Kibana技术对数百万知乎用户进行了数据分析,得到了这些......
  2. 用MATLAB编程求出三位数中全部的水仙花数
  3. 一个端到端模型GraphDR实现多样化的召回
  4. 《大数据分析原理与实践》一一第3章 关联分析模型
  5. ASP.net控件开发系列(四)
  6. 利用request库请求api
  7. Unigam标注和Ngram标注
  8. Tomcat下java普通类IO文件路径问题
  9. 美食杂志排行榜_百度知道
  10. Linux编译安装iozone,Fedora下NFS的配置与iozone测试
  11. 利用VLMCSD部署本地KMS服务器(Windows + CentOS7)
  12. 计算机仿真 matlab,计算机仿真(matlab)PPT教程.ppt
  13. 最新!中国内地高校ESI排名出炉:342所大学上榜!
  14. vue项目pc端和移动端适配
  15. 转:: 刺鸟:用python来开发webgame服务端(5)
  16. 元组定义 元组运算符
  17. 08-【go】go语言中的*和的使用方法
  18. Chrome网页观看百度云视频加速
  19. sys.stdout.write()用法
  20. Qt下使用vs编译的库文件

热门文章

  1. [英语语法]词法之动词:情态动词
  2. 解析Java横死之谜,气定神闲看花开花落
  3. markdown常用数学符号小结⌈ ⌉⌊ ⌋
  4. 考研力荐:宁缺毋滥 精选复习资料
  5. 探测器反向偏压_光电子技术题库
  6. 和氟西汀类似的备注_氟西汀一样好听的网名有哪些
  7. 宝剑锋从磨砺出,梅花香自苦寒来
  8. magicalcoder集成布局器
  9. 动软公司顺利通过国家“双软认证”
  10. SQL SERVER Management Studio 打不开