51Nod_1067Bash游戏 V2

原题链接
有一堆石子共有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");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值