猿问

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

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

大话西游666
浏览 855回答 1
1回答

茅侃侃

给,已经编译运行确认:#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;}elsecout << "最后一个球为黑球" << endl;system("pause");}
随时随地看视频慕课网APP
我要回答