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

还有 n个人 肯定需要很多圈报数 这个很多圈怎么实现 也是个问题 这些都是算法的相关问题

突然还有一个很感慨的事情 虽然高数课很久没上了 但是之前高数老师说的一句让我感受颇多 就是数学需要归纳总结 理解 我觉得这个对于很多科目都适用 不仅高数 c也可以 甚至是文科 比如这里需要循环很多圈 以后的另一个问题可能也会面临这个困难 怎么循环很多圈 还有就是报数怎么实现 都需要归纳总结 多思考

代码

int main()
{cout << "一共有多少个人:?" << endl;int n = 0;cin >> n;int num[50];int* p = num;for (int i = 0; i < n; i++){*(p + i) = i + 1;    //第几个人的编号就是几  从一开始}int i = 0;  //用于总循环的变量int k = 0;  //k是按123报数时的计数变量   一个循环变量  在循环体中让这个数字变化 当变到3的时候就进行某些操作int m = 0;  //m是退出的人数  当m等于n-1时 结束  否则不知道什么时候推出while (m < n - 1)    //当m等于n-1时 就结束{if (*(p + i) != 0) k++;  //如果这个人不是0 就是有效成员 k就加一 如果是0 那么就k就不变 下面的if语句就不会受到影响if (k == 3){*(p + i) = 0;   //报到3的人调为0  k = 0;          //从0开始重新报m++;            //退出人数加一}i++;if (i == n) i = 0;  //i=n-1的时候 是最后一个人  还不能调为0  当等于n 已越界 所以调为0重新循环}// 退出while循环时 已经只剩一个人不是0了while (*p == 0)  p++;   //直到不是0的那个人cout << "最后剩下的那个人是第" << *p << "个人" << endl;  //每个人的序号就是它的内容return 0;
}

不得不感叹这个程序的巧妙性  这个并不是我写出来的

首先 怎么把报到三的人踢出去呢?  这里的方法是把每个人都赋值一个数字  如果循环到3  就把对应的人改为0  然后踢出去的人数也加一

什么时候终止循环呢?  说实话我在看答案之前想过这个问题   这里的做法是统计踢出去的人数 当踢出去的人数到达总人数减一时 就终止  这个也很妙

这里的i变量  从0到n-1  一遍一遍地遍历 直到只剩下一个人为止

那么有没有其他方法呢  试想 如果以每个成员的内容为判断依据 如果它是3的倍数  那么第一遍的时候肯定就是报到3了  就把他变为0? 可是第二圈呢? 这里又不好处理了 其实也可以有别的办法 第二圈的时候可以把统计上一圈踢出去的人 把数组长度减小 但是那个剩下的人原来是几也不好计数了

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

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

    有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位 如题,相信很多人都和我一样,当时看到根本不知道从何下手.那么我们先不看代码,画图 ...

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

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

  3. 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)

    1. 有n个人围成一圈,从第1个人开始,1.2.3报数,报至3出局,余下的人继续从1.2.3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列.(要求:用循环队列解决该问题.) 这是一道 ...

  4. 有n个人围成一圈 顺序排号 java_java基础编程题有n个人围成一圈顺序排号

    下面给大家带来的这道编程题可以算得上是一道非常基础的java编程题目,刚刚开始接触java编程的小伙伴一起来看看具体的题目以及解题方法吧. 下面是具体的题目,题目还是非常的简单的. 一.题目 有n个人 ...

  5. 有n个人围成一圈 顺序排号 java_java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出...

    public class Test { public static void main(String[] args) { // 测试数据 ArrayList list = new ArrayList( ...

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

    #include <stdio.h> int main(){int i,k,m,n,num[50],*p;printf("几个人围成一圈?");scanf(" ...

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

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

  8. c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题 N个人围成一圈 - phpStudy...

    详解约瑟夫环问题及其相关的C语言算法实现 约瑟夫环问题 N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3开始报数,报p的人再退出圈外,以此类推 ...

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

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

最新文章

  1. ASP.NET JScript公共类(非常有用)
  2. JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。
  3. 辞旧迎新,总结2010,展望2011
  4. 【读书笔记】《第一行代码》
  5. html函数属性的赋予,你可以将javascript函数名称设置为html属性吗?
  6. python多线程网络编程_python网络编程之线程
  7. python框架之Django(2)-简单的CRUD
  8. 解决Azure DevOps部署到Azure后.NET Core网站无法启动的问题
  9. java 栈 先进后出_栈先进后出,堆先进先出
  10. 机器学习:神经网络之表达
  11. TensorFlow学习笔记——自然语言处理
  12. diskgenius创建efi分区_无损分区大小调整
  13. ubuntu linux崩溃,ubuntu linux qq崩溃问题的解决方法以及原因
  14. apk破解(二) 简单修改一个so文件
  15. 计算机维修万用电表使用,万用表的使用方法——图解
  16. 数理统计复习笔记九——正态性检验
  17. windows系统VS code coderunner 运行shell脚本
  18. 蓝桥杯单片机——PWM脉宽调制(10)
  19. 如何降低自动化维护成本?
  20. JDBC-05-PreparedStatement实现通用的增、删、改,查的方法

热门文章

  1. nacos配置完成后,启动不成功,页面打不开
  2. Bot 崛起:你的企业需要考虑这11个重要问题
  3. 各行各业利润大曝光!电脑、服装、房子、奶茶等等利润大曝光,快进来瞧瞧吧~
  4. Druid监控页面配置reset-enable的说明
  5. 电子工程师必备:运算放大器11种经典电路
  6. 计算机房设备搬迁协议,设备搬迁协议.docx
  7. 论文笔记之Non-Local
  8. 高度设置php,uedit设置固定高度
  9. Mockito 如何编写实现代码覆盖率,模拟接口返回的数据
  10. 织梦php程序调用模型,织梦教程:Dedecms的频道模型新建字段调用方法