送分啦-QAQ(斐波那契博弈)

本文介绍了一种基于斐波那契数列的博弈游戏,分析了游戏规则及获胜策略。当石子总数为斐波那契数时,先手玩家将处于必败状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一题就是一个斐波那契博弈问题。

斐波那契博弈:
有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下:

1)先手不能在第一次把所有的石子取完,至少取1颗;

2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍。

约定取走最后一个石子的人为赢家,求必败态。

结论:当n为Fibonacci数的时候,必败。

f[i]:1,2,3,5,8,13,21,34,55,89……

所以给出的n为斐波那契数,就输了;否则就赢了。

代码:

#include<stdio.h>
#include<string.h>

#include<algorithm>
using namespace std;
int a[100];//记录斐波那契数

int main()
{
    a[0]=1;
    a[1]=2;
    int inq=2;
    while(inq<=42)//因为n<=1e9,所以是前42个
    {
        a[inq]=a[inq-1]+a[inq-2];
        inq++;
    }
    int n;
    while(~scanf("%d",&n))
    {
        int p=lower_bound(a,a+44,n)-a;
        if(a[p]==n)
            printf("Sha\n");
        else printf("Xian\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值