水题打卡
问题描述
试题编号: | 201712-2 |
试题名称: | 游戏 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 输入格式 输入一行,包括两个整数n和k,意义如题目所述。 输出格式 输出一行,包含一个整数,表示获胜的小朋友编号。 样例输入 5 2 样例输出 3 样例输入 7 3 样例输出 4 数据规模和约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。 |
这里要考虑n==1和k==1的情况,特判一下就能全过了
ac代码:
import java.util.Scanner;
public class Main {
Scanner sc = new Scanner(System.in);
public void solution() {
int n = sc.nextInt();
if (n == 1) { //n==1只有一个小朋友那赢的就是它
System.out.println(1);
return;
}
int count = n;
int k = sc.nextInt();
if (k == 1) { //k==1每个小朋友一报数就淘汰,所以最后一个小朋友是最后留下来的小朋友将其编号输出
System.out.println(n);
return;
}
int[] vis = new int[n];
int preNum = 0;
int thisNum = 0;
while (count > 1) {
for (int i = 0; i < n; i++) {
if (vis[i] == 0) {
thisNum = preNum + 1;
if (thisNum % k == 0 || thisNum % 10 == k) {
vis[i] = 1;
count--;
}
preNum = thisNum;
}
}
}
for (int i = 0; i < n; i++) {
if (vis[i] == 0) {
System.out.println(i + 1);
break;
}
}
}
public static void main(String[] args) {
Main main = new Main();
main.solution();
}
}