1121: 取石子游戏I
时间限制: 1 Sec 内存限制: 128 MB
提交: 281 解决: 161
[提交][状态][讨论版]
题目描述
一堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win".
输入
多组测试数据。
每组测试数据包含1个整数n。(1<n<=1000000000)
输出
对于每组测试数据,输出谁获胜.
样例输入
2
13
10000
样例输出
Second win
Second win
First win
提示
时间限制: 1 Sec 内存限制: 128 MB
提交: 281 解决: 161
[提交][状态][讨论版]
题目描述
一堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win".
输入
多组测试数据。
每组测试数据包含1个整数n。(1<n<=1000000000)
输出
对于每组测试数据,输出谁获胜.
样例输入
2
13
10000
样例输出
Second win
Second win
First win
提示
来源
结论:若n是斐波那契数列则先手输。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000;
int main(void)
{
long long n,i,a[maxn];
a[0]=0,a[1]=1;
for(i=2;i<=maxn;i++)
a[i]=a[i-1]+a[i-2];
while(~scanf("%lld",&n))
{
int fg=0;
for(i=0;i<=maxn;i++)
if(a[i]==n)
{
fg=1;break;
}
else if(a[i]>n) break;
if(fg==0) printf("First win\n");
else printf("Second win\n");
}
return 0;
}