为了账号安全,请及时绑定邮箱和手机立即绑定

C++ 关于趣味取球的算法?

C++ 关于趣味取球的算法?

C++
大话西游666 2018-10-28 06:02:19
题目是这样的:已知袋中有若干个白球和黑球,每次从中取出2个球。如果取出的两个球为同色,则放回一个白球(袋外有足够的白球);如取出的两个球为异色,则放回一个黑球。试设计取球过程的默契程序,并判断最后剩下一个球的颜色!问题:开始是不是应该把这些球色定义为0或1 放在数组里?? 那怎么做到随机呢?用什么函数?给个算法吧~~~~~!!!
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

给,已经编译运行确认:
#include <iostream>
#include <time.h>

using namespace std;

enum Ball
{
white,
black
};

int main(int argc, char *argv[])
{
//定义袋中黑白球的数目
int BlackNum;
int WhiteNum;

//由用户指定袋中的黑白球数目
cout << "请输入袋中白球的数目" << endl;
cin >> WhiteNum;
cout << "请输入袋中黑球的数目" << endl;
cin >> BlackNum;

//初始化随机数种子
srand((unsigned)time(NULL));
int times = 0; //取球的次数

while ((BlackNum + WhiteNum) > 1)
{
++times;
int FirstBall;
int SecondBall;

//每次取得的第一个和第二个球
if (WhiteNum == 0) //袋中已没有白球,则只能取黑球
{
FirstBall = black;
cout << "第 " << times << "次取出的第一个球为黑色" << endl;
--BlackNum;
}
else if (BlackNum == 0)//袋中已没有黑球
{
FirstBall = white;
cout << "第 " << times << "次取出的第一个球为白色" << endl;
--WhiteNum;
}
else //否则随机取得一个球
{
FirstBall = rand() % 2;
if (FirstBall == white)
{
cout << "第 " << times << "次取出的第一个球为白色" << endl;
--WhiteNum;
}
else
{
cout << "第 " << times << "次取出的第一个球为黑色" << endl;
--BlackNum;
}
}

if (WhiteNum == 0) //袋中已没有白球,则只能取黑球
{
SecondBall = black;
cout << "第 " << times << "次取出的第一个球为黑色" << endl;
--BlackNum;
}
else if (BlackNum == 0)//袋中已没有黑球
{
SecondBall = white;
cout << "第 " << times << "次取出的第一个球为白色" << endl;
--WhiteNum;
}
else
{
SecondBall = rand() % 2;

if (FirstBall == white)
{
cout << "第 " << times << "次取出的第二个球为白色" << endl;
--WhiteNum;
}
else
{
cout << "第 " << times << "次取出的第二个球为黑色" << endl;
--BlackNum;
}

}

//根据取出的两个球的颜色是否相等来觉得是放黑球进去还是白球进去
if (FirstBall == SecondBall)
{
++WhiteNum;
}
else
{
++BlackNum;
}

}

if (WhiteNum == 1)
{
cout << "最后一个球为白球" << endl;
}
else
cout << "最后一个球为黑球" << endl;
system("pause");
}



查看完整回答
反对 回复 2018-11-18
  • 1 回答
  • 0 关注
  • 800 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信