取石头的问题

来源:互联网 发布:mysql忽略大小写 编辑:程序博客网 时间:2024/04/29 09:35

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;}