N个石头,2个人依次只能取1、3、4个石头,取到最后一个石头者赢。判断第一个取的人是否会赢。
下面的代码在时间复杂度上还有很严重的问题,N为2位数时还好,大于100直接蹦掉了,希望有大牛给修正下。。。。
不过这个题也可以先算出来规律,然后一行代码搞定~~
对于这种取法,除以7余0或者除以7余2时,先取的人都会输,其他情况下,先取的都能保证赢~~
#include <iostream>
using namespace std;
bool choose(int n)
{
bool b1,b2,b3;
if(n>4)
{
b1=!choose(n-1);
b2=!choose(n-3);
b3=!choose(n-4);
return (b1||b2||b3);
}
else
{
switch (n)
{
case 1: return true;
case 2: return false;
case 3: return true;
case 4: return true;
}
}
}
int main()
{
//cout << "Hello world!" << endl;
int num;
while(1){
cout<<"请输入石头总数:\n"<<endl;
cin>>num;
cout<<choose(num)<<endl;
}
return 0;
}