刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

5.## 硬币翻转
假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于正面向上的状态;有M个人(M为不大于N的正整数)也从1到M依次编号。
第一个人(1号)将硬币全部翻转一次,第二个人(2号)将编号为2的倍数的硬币翻转一次,第三个人(3号)将编号为3的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的硬币翻转一次。
请问:当第M个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。
时间限制:10000
内存限制:65536
输入
输入正整数N和M,以单个空格隔开。
输出
顺次输出正面向上的硬币的编号,其间用空格间隔。
样例输入
10 10
样例输出
2 3 5 6 7 8 10

使用微信搜索喵呜刷题,轻松应对考试!

答案:

解析:

【喵呜刷题小喵解析】:
这个问题可以通过模拟来解决,具体的方法已经在答案中给出。在这个问题中,我们需要判断每一个硬币是否被翻转过,因此我们可以使用一个布尔数组来记录每一个硬币的状态。然后,我们可以根据题目描述的规则,对于每一个操作人,判断其操作范围内的每一个硬币是否被翻转过。最后,我们可以输出所有没有被翻转过的硬币的编号。

需要注意的是,由于硬币的编号是从1开始的,因此在初始化布尔数组时,我们需要将数组的长度设为N+1,以便能够记录编号为N的硬币的状态。另外,在判断硬币是否被翻转过时,我们需要从操作人的编号开始遍历,而不是从1开始。这是因为,如果操作人的编号小于硬币的编号,那么硬币就不会被翻转。因此,我们只需要判断硬币的编号是否为操作人的编号的倍数即可。
创作类型:
原创

本文链接:5.## 硬币翻转假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share