原题链接
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次只能拿1,3,4颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。
例如N = 2。A只能拿1颗,所以B可以拿到最后1颗石子。
分析:
这题我们没法按之前的思路做了,因为数字是不连续的,如果你选择5为区间的话,1、4能够成对,3却没有2来与之组合。似乎没什么好思路,那我们来画张表慢慢尝试吧。
石子数目 | 获胜者 |
---|---|
1 | A |
2 | B |
3 | A |
4 | A |
5 | A |
6 | A |
7 | B |
8 | A |
9 | B |
10 | A |
慢慢推演,我们可以发现B每次在上一个B出现+2、+5交替出现,这是为什么呢?我们能否证明这一规律?
1,很明显,A胜;
2,只能1、1,B胜;
3、4直接A胜;
5、6,在2的基础上取3、4即可保证A胜;
7,如果你选3或4,B可以选另一个,只能选1,此时B选4剩2,必败;
8,在7的基础上取1即可保证A胜;
9,无法到达7,选1时B也选1,A败,要到达2必须取7,在7时我们已证A必败(7颗石子时A必定无法拿到最后一颗,也就是A无法到达2);
…………
一直循环下去,我们可以看出是以7为循环,n mod 7为0和2时必败。接下来我们就是要证明7k、7k+2是B获胜,7k+1、7k+3、7k+4、7k+5、7k+6是A获胜。(k=0、1、2、3……)
以下是证明:
根据上述推理,n=0时结论成立。(为了便于说明,我们不妨定义石子数为0时B获胜,如果您怀有疑问可从n=1,即石子数7~13作为起始)
假设当n=k时结论成立。
7(k+1)时,若A选择1,则B选择4,此时为7k+2,B获胜。若A选择3或4,则B选另一个,此时为7k,依然是B获胜。
7(k+1)+1/3/4时,A选择1/3/4,到达7(k+1)位置,A获胜。
7(k+1)+2时,若A选择1,则B选择1,到达7(k+1)位置,B获胜;若A选择3或4,则B选另一个,此时为7k+2,依然是B获胜。
7(k+1)+5/6时,A选择3/4,到达7(k+1)+2位置,A获胜。
综上所述n=k+1时结论也成立,根据数学归纳法,当n为自然数时结论均成立。
证毕。
import java.util.Scanner;
public class No_1067 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++){
winner(sc.nextInt());
}
sc.close();
}
public static void winner(int n){
int code=n%7;
if(code==0||code==2){
System.out.println("B");
}else{
System.out.println("A");
}
}
}