输入文字 五 1 五 7 10 123456789123456789
使用binginteger因为输入值很大
不适用于123456789123456789。 我不知道哪个是错的。
对于游戏方法,两个人首先确定一个正整数N并且有一个用1初始化的x。
Alice首先开始游戏,然后轮流,她自己完成以下工作。
将x替换为2x或2x + 1。
当x大于N(over)时,完成工作的人将被击败。
我的代码如下。
public static Boolean result(int X, BigInteger N) {
if(X == 0)
return false;
else if(X % 2 == 0) {
BigInteger check = BigInteger.valueOf((int)((3*Math.pow(2,X)-1)/2));
if(check.compareTo(N) == 1 || check.compareTo(N) == 0)
return true;
else
return false;
}
else
return true;
}
public static int returnX(BigInteger N) {
int X = 0;
while(true) {
if((BigInteger.valueOf((int)Math.pow(2,X)).compareTo(N) == -1
|| BigInteger.valueOf((int)Math.pow(2,X)).compareTo(N) == 0)
&& N.compareTo(BigInteger.valueOf((int)Math.pow(2,X+1))) == -1)
break;
X++;
}
return X;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
BigInteger[] N = new BigInteger[T];
for (int test_case = 1; test_case <= T; test_case++) {
N[test_case-1] = sc.nextBigInteger();
}
for (int test_case = 1; test_case <= T; test_case++) {
if(result(returnX(N[test_case-1]),N[test_case-1])) {
System.out.printf("#%d Alice\n",test_case);
}
else
System.out.printf("#%d Bob\n",test_case);
}
}