C++一道题目,求解答。

问题是这样的:
两个人玩捡树枝游戏,树枝的数量由用户来输入。但是树枝的数量不能超过21,用投掷硬币来决定先后顺序。每个人能一次性拿一枝或者两枝。谁拿到最后一枝树枝谁就输。
请用C++写出来。

 #include <time.h>
#include <iostream>
using namespace std;
int main()
{
    char player[2][40];
    int num,loop,loops,branch,start,branchTotal;
    int winCount[2]={0,0};

    cout<<"-------------树枝游戏---------------\n";
    cout<<"请输入第一名玩家姓名:";
    cin>>player[0];
    cout<<"请输入第二名玩家姓名:";
    cin>>player[1];

    do 
    {
        cout<<"请输入局数(不超过5局):";
        cin>>loop;
    } while (loop>5 || loop<1);

    do 
    {
        cout<<"请输入每局树枝总数(不超过21枝)";
        cin>>branchTotal;
    } while (branchTotal>21 || branchTotal<1);

    loops=1;
    while(loops<=loop)
    {
        srand( (unsigned)time( NULL ) ); //根据时间生成随机数种子
        start = rand()%2;//随机产生谁先开始

        cout<<"\n\n<游戏第"<<loops<<"局开始,每次只能拿走1-2个树枝>\n";
        branch=branchTotal;
        while(branch>0)
        {
            cout<<"当前树枝总数:"<<branch<<"  ";
            do 
            {
                cout<<"请"<<player[start]<<"取树枝:";
                cin>>num;
            } while ( num<1 || num>2 );
            branch-=num;

            if(branch<=0)
            {
                cout<<player[start]<<"本局获胜!\n";
                winCount[start]++;
                break;
            }
            start=(start+1)%2;
        }

        loops++;
    }
    cout<<"--------游戏结束-----------\n";
    cout<<loop<<"局,"<<player[0]<<"胜"<<winCount[0]<<"局; "<<player[1]<<"胜"<<winCount[1]<<"局\n\n";
    if( winCount[0] > winCount[1]) 
    {
        cout<<"恭喜!最终"<<player[0]<<"获胜!\n";
    }
    else if( winCount[0] < winCount[1]) 
    {
        cout<<"恭喜!最终"<<player[1]<<"获胜!\n";
    }else
    {
        cout<<"平局!\n";
    }

    return 0;
}

这个题其实和经典的斐波那契数列是一个题吧:

 #include <iostream>
using namespace std;
int f(int n)
{
 if (n==0||n==1)    //注意主函数循环初值为0
  return 1;
 else
  return f(n-1)+f(n-2);
}
int main()
{
 int i,a[12];
 for (i=0;i < 12;i++)
 {
  a[i]=f(i);
  cout << a[i] << endl;
 }
 return 0;
}

这是策略问题,如果总数是3的倍数,谁先拿谁输;不是3的倍数,谁先拿,只要他拿完保证剩下的仍是3的倍数,那他就会赢。
道理很简单,3个树枝,你先拿,不管你拿1个或2个,我肯定会赢。

这个题目不难。鉴于一般大额悬赏的人都不结贴。。就不费那个劲了。给你提供个思路:
就是投硬币可以用随机数实现,比如产生rand()%2产生0,1随机数,规定1先拿。注意要使用随机数种子。
其他问题就很简单了。

感谢shiter的解答。不过似乎不太完整。
树枝是由用户输入的。选择拿一根或者两根树枝也是用户自己选择的,属于交互方面的。抛硬币决定谁先谁后,是一个随机数。

请尽量多加注释,本人小白。

逻辑弄反了,代码中谁拿最后一个谁赢。
如果谁拿最后一个谁输,就修改一下顺序即可:

            start=(start+1)%2;//这句放在if判断前
            if(branch<=0)
            {
                cout<<player[start]<<"本局获胜!\n";
                winCount[start]++;
                break;
            }

好像这个题目是和常胜将军是一样的只要有规律的拿,是一定会赢的,应该是凑的3倍数就稳赢了