ccf_201712-2
2024-05-26 19:10:26
题目
问题描述
有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号小朋友获胜。
游戏开始,从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号小朋友获胜。
给定n和k,请问最后获胜的小朋友编号为多少?
输入格式
输入一行,包括两个整数n和k,意义如题目所述。
输出格式
输出一行,包含一个整数,表示获胜的小朋友编号。
样例输入
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
最新文章
- Markdown快速上手
- PowerDesigner的数据类型
- 阿里云服务器如何安装memcached
- c++primer第五版,p134页第2题自编程序
- SQL server 统计分组经计
- php上传大文件时,服务器端php.ini文件中需要额外修改的选项
- centos 6.5 yum mysql 5.6_centos 6.5 yum安装 mysql 5.6
- Telnet发邮件过程
- Echarts数据可视化polar极坐标系,开发全解+完美注释
- UBuntu CMake工程配置基础
- 2022牛客寒假算法基础集训营(一)1全部题解
- 超级高铁(Hyperloop)
- 用JAVA编程的数字时钟代码
- matplotlib颜色表
- 华为网络拒绝接入_为何华为手机网络拒绝接入
- 沁恒MCU串口使用指南
- c语言dsp编程论坛,针对Ti的DSP C语言编程
- hive:函数:自定义函数(笔记)
- java swing漂亮界面框架_开源软件分享-漂亮的JavaFx GUI界面框架
- 数字信号处理实验4:用窗口法设计FIR滤波器
热门文章
- SEO原创文章制作器
- [VC6] RadioBox使用入门
- C++调用Python函数
- 手把手教你用好LINQ to SQL(1)
- 让窗体获得焦点,一定会有您用到的时候
- 图片不显示问题 图片url监测改变问题
- [react] react中setState的第二个参数作用是什么呢?
- [react] 请说说什么是useImperativeHandle?
- [react] React如何进行代码拆分?拆分的原则是什么?
- [html] 举例说明实现文字贯穿线的方法有哪些?