题意:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。
取完者胜,先取者负输出"Second win",先取者胜输出"First win".
思路:很明显这是一个斐波那契博弈,当且仅当 n 为斐波那契数时先手必败
代码:
#include <iostream> using namespace std; int main() { int n; int f[45]; f[0]=2; f[1]=3; for(int i=2;i<45;i++) f[i]=f[i-1]+f[i-2]; while(cin>>n&&n) { int flag=1; for(int i=0;i<45;i++) if(f[i]==n) { flag=0;break; } if(flag) cout<<"First win"<<endl; else cout<<"Second win"<<endl; } return 0; }