51Nod-1070-Bash游戏 V4

来源:互联网 发布:stm32f103vct6数据手册 编辑:程序博客网 时间:2024/06/08 09:40

ACM模版

描述

描述

题解

这道题存在一些问题,对于1没有进行合法的规定,如果加上一句当石子数为1时,B赢,那么就完美了。因为经过找规律发现,只要石子数为斐波那契数列中的一项,B赢,反之,A赢,所以很简单喽……这里要注意的是打表的数目,因为我一开始打表时FB[]数组定义的有些大,结果超出了数据范围,只有前47个数没有出错,后续的全部为负数(因为数据溢出了),然后我一二分查找,结果输出的全部为A……尴尬死了。

代码

#include <iostream>using namespace std;const int MAXN = 46;int FB[MAXN];   //  斐波那契数列void init(){    FB[0] = 0;    FB[1] = 1;    for (int i = 2; i < MAXN; i++)    {        FB[i] = FB[i - 1] + FB[i - 2];    }    return ;}//  二分查找Nint bs(int a[], int l, int h, int N){    int m;    while (l < h)    {        m = (l + h) >> 1;        if (a[m] == N)        {            return m;        }        if (a[m] < N)        {            l = m + 1;        }        else        {            h = m;        }    }    return 0;}int main(int argc, const char * argv[]){    init();    int T;    cin >> T;    int N;    while (T--)    {        cin >> N;        if (bs(FB, 1, MAXN, N))        {            cout << "B\n";        }        else        {            cout << "A\n";        }    }    return 0;}

参考

《二分查找》
51Nod-1068-Bash游戏 V3

0 0