您的位置:首页 > 运维架构 > Shell

51Nod_1067Bash游戏 V2

2015-08-07 10:08 267 查看
原题链接

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次只能拿1,3,4颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。

例如N = 2。A只能拿1颗,所以B可以拿到最后1颗石子。

分析:

这题我们没法按之前的思路做了,因为数字是不连续的,如果你选择5为区间的话,1、4能够成对,3却没有2来与之组合。似乎没什么好思路,那我们来画张表慢慢尝试吧。

石子数目获胜者
1A
2B
3A
4A
5A
6A
7B
8A
9B
10A
慢慢推演,我们可以发现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");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: