问题描述
- 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<<"-------------树枝游戏---------------
";
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<<"
<游戏第"<<loops<<"局开始,每次只能拿走1-2个树枝>
";
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]<<"本局获胜!
";
winCount[start]++;
break;
}
start=(start+1)%2;
}
loops++;
}
cout<<"--------游戏结束-----------
";
cout<<loop<<"局,"<<player[0]<<"胜"<<winCount[0]<<"局; "<<player[1]<<"胜"<<winCount[1]<<"局
";
if( winCount[0] > winCount[1])
{
cout<<"恭喜!最终"<<player[0]<<"获胜!
";
}
else if( winCount[0] < winCount[1])
{
cout<<"恭喜!最终"<<player[1]<<"获胜!
";
}else
{
cout<<"平局!
";
}
return 0;
}
解决方案二:
逻辑弄反了,代码中谁拿最后一个谁赢。
如果谁拿最后一个谁输,就修改一下顺序即可:
start=(start+1)%2;//这句放在if判断前
if(branch<=0)
{
cout<<player[start]<<"本局获胜!
";
winCount[start]++;
break;
}
解决方案三:
一道题目的解答
解决方案四:
这个题其实和经典的斐波那契数列是一个题吧:
#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的解答。不过似乎不太完整。
树枝是由用户输入的。选择拿一根或者两根树枝也是用户自己选择的,属于交互方面的。抛硬币决定谁先谁后,是一个随机数。
请尽量多加注释,本人小白。
解决方案八:
ysuwood,请不吝赐教!如采纳,100C双手奉上!
解决方案九:
好像这个题目是和常胜将军是一样的只要有规律的拿,是一定会赢的,应该是凑的3倍数就稳赢了
时间: 2024-12-29 14:52:45