Bash游戏 V4

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次拿的数量最少1个,最多不超过对手上一次拿的数量的2倍(A第1次拿时要求不能全拿走)。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。
例如N = 3。A只能拿1颗或2颗,所以B可以拿到最后1颗石子。
这是道经典   博弈斐波纳契博弈 知道就简单

再说这个之前先说一下斐波那契数列,这是1870年出来的老货。在数学上f(0)=0,f(1)=1,f(2)=1,f(3)=2……fn=f(n-1)+f(n-2)

再说一下Zeckendorf定理(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和例如83=55+21+5+2,没错吧自己分解一下就行了

当石子为Fibonacci 数时,谁面对这种局势,谁输,证明就略了

#include<stdio.h>
bool panduan(int N){
    int a,b,c;
    //if(N==1)return true;
    a=0;b=1;
    c=1;
   while(c<N){
       c=a+b;
       b=a;
       a=c;

   }
   if(c==N)return false;
   return true;

}
int main(){
    int t,N;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&N);
        if(panduan(N))
        printf("A\n");
        else printf("B\n");

    }

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值