试题编号: | 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。 |
解题思路:做了几套题,发现第二题一般都会与数组或者集合打交道,做这个题,我先用数组做的,但是一直90。一直找不出毛病,代码如下:
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int data[] = new int[n+10];
for(int i=0;i<n;i++)
data[i] = i+1;
int num = n;
int max = n;
while(num>1){
int num2 = 0;
int numOfout = 0;
for(int i=0;i<n;i++){
if(max<data[i])
max = data[i];
}
for(int i=0;i<n;i++){
if(data[i]!=0){
if(data[i]%k==0||data[i]%10==k){
data[i] = 0;
numOfout++;
} else{
num2++;
data[i] = num2+max;
//System.out.println(data[i]);
}
}
}
/*for(int i=0;i<n;i++)
System.out.print(data[i]+" ");
System.out.println();*/
//System.out.println(numOfout);
num = num-numOfout;
}
for(int i=0;i<n;i++){
if(data[i]!=0){
System.out.println(i+1);
break;
}
}
}
}
贴下大佬的代码,表示有点懵,没怎么看懂。。。来源:https://blog.csdn.net/hunjue0915/article/details/80555920
import java.util.ArrayDeque;
import java.util.Scanner;
public class Main {
static ArrayDeque queue;
static int num=1;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int count=in.nextInt();
int n=in.nextInt();
queue=new ArrayDeque();
for (int i=0;i<count;i++){
queue.offer(i+1);
}while (queue.size()>1){
int top= (int) queue.poll();
if (num%n!=0&&num%10!=n){
queue.offer(top);
}
num++;
}
System.out.println(queue.peek());
}
}