题目

问题描述
  有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时,表示游戏中仅剩一个参赛者,此时退出循环得出结果。

代码

 #include <iostream>
using namespace std; int main() {
bool per[];
for (int i = ; i < ; i++)
per[i] = true;
int n = , k = ;
cin >> n >> k;
int i = ;
int cnt = n;
int loc = ;
while (true) {
while (per[loc] == false) {
loc++;
if (loc >= n)
loc = ;
}
if (i % k == || i % == k) {
cnt--;
per[loc] = false;
}
i++;
loc++;
if (loc >= n)
loc = ;
if (cnt == )
break;
}
for (int i = ; i < n; i++) {
if (per[i] == true)
cout << i + << endl;
} return ;
}

随机推荐

  1. IT兄弟连 JavaWeb教程 JSP动作指令

    JSP动作指令语法 JSP动作指令语法格式如下: <jsp:动作名 属性名1="属性值1" 属性名2="属性值2" ... %> JSP具体动作指令 ...

  2. XCode5 编译ffmpeg流程

    今天想在Mac10.9 XCode5的环境下把ffmpeg编译出来,本来以为很好搞定,结果版本一升级,以前的命令行不通了,出各种错误.折腾了三四个小时,最后终于成功了. 编译流程: 1.ffmpeg官 ...

  3. python模块之hmac

    # hmac模块使用步骤: # hmac模块模块的使用步骤与hashlib模块的使用步骤基本一致,只是在第1步获取hmac对象时,只能使用hmac.new()函数, # 因为hmac模块没有提供与具体 ...

  4. echarts 百度地图 json

    百度ECharts地图Json数据在线下载 最近需要写一个echarts地图统计表,苦于弄不到对应的地图json文件, CSDN 上下载的很多不完整或者不能用,功夫不负苦心人找到了这个. 阿里云地图选 ...

  5. PHP 函数的参数

    函数的参数 通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表. PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数.也支持可变数量的参数:更多信息请参照可变长度参数列表和涉及 ...

  6. Android -Cannot run program "XXX/sdk/tools/emulator": error=2, No such file or directory

    I have installed android SDK and eclipse successfully on ubuntu 14.04. However,now it's not running. ...

  7. Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则

    1.那么我们再来看我们需要的访问方式,如下图 如果我们要访问Admin下的TestController里面的Index页面,那么我们输入Test/Index,这个肯定不行的.因为TestControl ...

  8. sql server技巧

    --查出数据最新的存储过程select name,modify_date from sys.procedures where modify_date>'2017-05-26 17:21:09.3 ...

  9. 11.JAVA-Object类之finalize(),clone(),toString()等方法覆写

    1.Object介绍 Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过向上转型的方法使用 ...

  10. JS动态获取项目名以及获取URL地址中的参数

    在项目当中我们可能会遇到例如改变的项目名称之后,相对应的地址就需要改变,为了减少工作量,将地址当中的项目名这一块写成动态获取的,那么最关键一点就是我要先获取它,再进行操作: 知识点整理,话不多说,直接 ...