有一堆石子共有N个。A B两个人轮流拿,A先拿。每次拿的数量最少1个,最多不超过对手上一次拿的数量的2倍(A第1次拿时要求不能全拿走)。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。
例如N = 3。A只能拿1颗或2颗,所以B可以拿到最后1颗石子。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1<=T<=1000) 第2-T+1行:每行1个数N。(1<=N<=10^9)
Output
共T行,如果A获胜输出A,如果B获胜输出B。
Input示例
3 2 3 4
Output示例
B B A
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int fb[44]; void init() { fb[1] = 1; fb[2] = 2; for (int i = 3; i < 44; i++) { fb[i] = fb[i-1] + fb[i-2]; } } int main() { init(); int t,n; cin >> t; for (int i = 0; i < t; i++) { cin >> n; bool found = false; for (int j = 1; j < 44; j++) { if (fb[j] == n) { found = true; break; } if (fb[j] > n) { break; } } if (!found) { cout << "A" << endl; } else { cout << "B" << endl; } } return 0; }原文链接:https://www.f2er.com/bash/389165.html