思路来源:https://blog.youkuaiyun.com/ljflm/article/details/79323100(感谢)
问题描述
试题编号: | 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。 |
问题分析:这道题实际上就是约瑟夫环问题,建立一个数组,初始化为0,只要为被淘汰的人数大于1,遇到等于0的元素就加一,一旦符合淘汰条件将其等于1即可。
import java.util.Scanner;
public class Main201712_2 {
public static void main(String[] args){
int n=0, k=0;
Scanner s = new Scanner(System.in);
n = s.nextInt();
k = s.nextInt();
int[] kids = new int[n];
int counter=0, i=0;
while (check(kids, n)){
if (kids[i]==0)
counter++;
if(counter%k==0||counter%10==k)
kids[i]=1;
i++;
if(i==n)
i=0;
}
for(i=0; i<n; i++){
if(kids[i]==0){
System.out.printf("%d",i+1);
}
}
}
public static boolean check(int a[],int n){
int sum=0, i;
for(i=0; i<n; i++){
if(a[i]==0)
sum++;
}
if(sum==1)
return false;
else
return true;
}
}