样例输出:4
题目如上所示,解题思路是:构造一个篮筐数组和一个与篮筐数组一样大小的标志位数组,标识该对应的篮筐是否已经有球。有球,则返回此时篮筐编号,结束游戏;或者,重复进行投尽所有篮球,返回-1,游戏结束。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int p = sc.nextInt();
int n = sc.nextInt();
long[] array = new long[n];
for(int i= 0;i<n;i++){
array[i] = sc.nextLong();
}
System.out.println(touLan(p,n,array));
}
}
public static int touLan(int p, int n, long[] array){
if(p<2 || p>300 || n<2 || n>300){
return -1;
}
int[] basket = new int[p];
long[] x = array;
boolean[] flag = new boolean[p];
for (int i = 0; i < n; i++) {
flag[i] = false;
}
for (int i = 0; i < n; i++) {
if (!flag[(int) (x[i] % p)]) {
basket[i] = (int) (x[i] % p);
flag[basket[i]] = true;
} else {
return i + 1;
}
}
return -1;
}
}
上述代码,本机测试,可以实现题意所需,但在赛码网上提交测试时只能通过40%测试用例,希望大家能指出不足之处。