算法:围圈报数类问题的经典解题思路
2021-06-05 00:03
标签:数组 代码 while ring 掌握 scanf 必须 不能 shell 大概题型如下: 有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n, 格式 输出格式 样例 输出样例 限制 解题代码:(虽然我也是“拿来主义者,但有时还是要有点追求,建议看下代码下面的原理”) 这只是这么多这种题型中的一道,所以要掌握的是这种题的解题套路以及相关相关思想。 算法:围圈报数类问题的经典解题思路 标签:数组 代码 while ring 掌握 scanf 必须 不能 shell 原文地址:https://www.cnblogs.com/5-StarrySky/p/14642005.html算法:围圈报数类问题经典解题思路
描述
打印出列的顺序。
输入格式n和m。
出列的顺序。
输入样例4 17
1 3 4 2
时间限制: 1000 ms
内存限制: 65536 KB#include
解题套路级思想:
在这种题中,表述的内容无非不就是,n个人围成圈,然后报数,那么题目是没有给我们具体循环次数的,从一开始就决定了不能使用for循环,所以选择用while,个人比较喜欢写死循环while(1)在写跳出循环方法if(peopleNum==n) break;,当然你也可以写成while(peopleNum!=n).
然后进入关键部分,在本题中需要一个计数器num,一个下标index,一个进行标记的数组,进入循环后,首先应该判断负责标记的数组,标记的作用是判断人是否还在圈内,在则进行报数,报的数字可以被要求数字整除,将其出列(标记数组改为1),如果不能被整除,则跳过。这里有个小细节!!!只有在队列的数组才可以报数,所以计数器也只有人还在队列时才会自加,所以计数器必须放到标记数组判断的范围内。接下来就是一个下标自加,如果越界就变回0.至此整个思路和代码结束
上一篇:JavaDoc参数整理
下一篇:JZ51 构建乘积数组