题目

问题描述
  有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。
  游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。
  例如,当n=5, k=2时:
  1号小朋友报数1;
  2号小朋友报数2淘汰;
  3号小朋友报数3;
  4号小朋友报数4淘汰;
  5号小朋友报数5;
  1号小朋友报数6淘汰;
  3号小朋友报数7;
  5号小朋友报数8淘汰;
  3号小朋友获胜。

  给定nk,请问最后获胜的小朋友编号为多少?

输入格式
  输入一行,包括两个整数nk,意义如题目所述。
输出格式
  输出一行,包含一个整数,表示获胜的小朋友编号。
样例输入
5 2
样例输出
3
样例输入
7 3
样例输出
4
数据规模和约定
  对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。

这道题写了挺长时间,主要还是考虑不充分结果屡次没有AC——问题在于用循环跳过已经剔除的人,该过程中没有考虑当到达边界条件时位置的归零问题;

解题思路

开一个布尔型的数组表示参加游戏的人是否被剔除出游戏,初始值设为true表示在游戏中,定义一个计数变量cnt表示仍然在游戏中的人数、一个位置变量表示当前报数的是哪个人、当前报的数字i;

如果循环中当前报的数字满足题设给出的剔除条件,则把数组中当前位置取假表示该位置的参赛者已经被剔除出游戏,循环中需要注意三个问题:

1. 当位置变量到达人数的上限时表示此时报数的是最后一人,此时需要再从第一个人开始,因此需要将位置变量重新赋值为0;

2. 需要保证每次操作时位置变量对应的布尔类型的数组中的值为true,也就是当前位置上的参赛者目前仍然再游戏中,否则进行循环直到访问到的参赛者仍然在在游戏中;

3. 当计数变量为1时,表示游戏中仅剩一个参赛者,此时退出循环得出结果。

代码

 1 #include <iostream>
 2 using namespace std;
 3
 4 int main() {
 5     bool per[1005];
 6     for (int i = 0; i < 1005; i++)
 7         per[i] = true;
 8     int n = 0, k = 0;
 9     cin >> n >> k;
10     int i = 1;
11     int cnt = n;
12     int loc = 0;
13     while (true) {
14         while (per[loc] == false) {
15             loc++;
16             if (loc >= n)
17                 loc = 0;
18         }
19         if (i % k == 0 || i % 10 == k) {
20             cnt--;
21             per[loc] = false;
22         }
23         i++;
24         loc++;
25         if (loc >= n)
26             loc = 0;
27         if (cnt == 1)
28             break;
29     }
30     for (int i = 0; i < n; i++) {
31         if (per[i] == true)
32             cout << i + 1 << endl;
33     }
34
35     return 0;
36 }

转载于:https://www.cnblogs.com/moujun1001/p/9362666.html

最新文章

  1. Markdown快速上手
  2. PowerDesigner的数据类型
  3. 阿里云服务器如何安装memcached
  4. c++primer第五版,p134页第2题自编程序
  5. SQL server 统计分组经计
  6. php上传大文件时,服务器端php.ini文件中需要额外修改的选项
  7. centos 6.5 yum mysql 5.6_centos 6.5 yum安装 mysql 5.6
  8. Telnet发邮件过程
  9. Echarts数据可视化polar极坐标系,开发全解+完美注释
  10. UBuntu CMake工程配置基础
  11. 2022牛客寒假算法基础集训营(一)1全部题解
  12. 超级高铁(Hyperloop)
  13. 用JAVA编程的数字时钟代码
  14. matplotlib颜色表
  15. 华为网络拒绝接入_为何华为手机网络拒绝接入
  16. 沁恒MCU串口使用指南
  17. c语言dsp编程论坛,针对Ti的DSP C语言编程
  18. hive:函数:自定义函数(笔记)
  19. java swing漂亮界面框架_开源软件分享-漂亮的JavaFx GUI界面框架
  20. 数字信号处理实验4:用窗口法设计FIR滤波器

热门文章

  1. SEO原创文章制作器
  2. [VC6] RadioBox使用入门
  3. C++调用Python函数
  4. 手把手教你用好LINQ to SQL(1)
  5. 让窗体获得焦点,一定会有您用到的时候
  6. 图片不显示问题 图片url监测改变问题
  7. [react] react中setState的第二个参数作用是什么呢?
  8. [react] 请说说什么是useImperativeHandle?
  9. [react] React如何进行代码拆分?拆分的原则是什么?
  10. [html] 举例说明实现文字贯穿线的方法有哪些?