请问下面一题怎么编程(C++)

已知袋中有若干个白球和黑球,每次从中取出两个球,如取出的各个球为同色,则放回一个白球(袋外有足够的白球);如取出的两个球为异色,则放回一黑球。试设计取球过程的模拟程序,判断最后剩下的一个球的颜色。

分析一下每次取球,有25%的几率取出两个白球,有25%的几率取出两个黑球,有50%的几率取出一个黑球一个白球。
下面的程序先初始化白球、黑球的数量,然后在随机设置取球的动作,循环到最后,只剩下一个球。

#define TWO_WHITE 0 //取出两个白球
#define TWO_BLACK 3 //取出两个黑球
#include "stdlib.h"
#include "time.h"
int main(void)
{
time_t t;
int cur_black;
int cur_white;
int op; //op随机取球动作的含义 0:两个白球 1:一个白球一个黑球 2:一个黑球一个白球(同1) 3:两个黑球

void print_status(int,int,int);

srand((unsigned) time(&t));

cur_black = 10+rand()%10; //初始化黑球的数量(可以修改为其他值)
cur_white = 10+rand()%10; //初始化白球的数量(可以修改为其他值)

printf("before operate: count_black=%d, count_white=%d\n",cur_black,cur_white);

while(cur_black+cur_white>1)
{
op=rand()%4; //设置随机取球的动作
switch( op )
{
case TWO_WHITE :
if( cur_white>=2 )
{
cur_white -= 2 ;
cur_white++;
print_status(op,cur_black,cur_white);
}
break;
case TWO_BLACK:
if( cur_black>=2 )
{
cur_black -= 2;
cur_white++;
print_status(op,cur_black,cur_white);
}
break;
default:
if( cur_black>=1 && cur_white>=1 )
{
cur_black--;
cur_white--;
cur_black++;
print_status(op,cur_black,cur_white);
}
}

}

if(cur_black==1) printf("the last is BLACK!\n");
else printf("the last is WHITE!\n");

return 0;
}

void print_status(int op,int cur_black,int cur_white)
{
printf("op=%d : cur_black=%d, cur_white=%d\n",op,cur_black,cur_white);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-03
只要球的数目是确定的,那么最后一个球的颜色也是确定的.这里取球事件是随机的.
#include<iostream.h>
#include"stdlib.h"
class stack
{
int top;
public:
stack(int m)
{
int i;
top=-1;
for(i=0;i<m;i++)
top++;
}//初始化STACK类
void pop()
{
top--;
}
void push()
{
top++;
}
int isnull()
{
if(top==-1) return 1;
return 0;
}
};
main()
{
int m,n;
cout<<"please input white_ball's number=";
cin>>m;
cout<<"please input black_ball's number=";
cin>>n;
stack white(m),black(n);
int i=m+n;
while(i>1)
{
if (m<=0)
{
white.push();
m++;
black.pop();
n--;
black.pop();
n--;
}
if(n<=0)
break;
int j1,j2;
srand(1);
j1=rand();
j2=rand();
if(j1==j2)//两个球的颜色相同
if(j1==0)//两球为白色
{
white.pop();
m--;
}
else
{
n=n-2;
black.pop();
black.pop();
white.push();
m++;
}
if(j1!=j2)
{
white.pop();
m--;
}
i--;
}
if(white.isnull())
cout<<"The last ball's color is black!"<<endl;
else
cout<<"The last ball's color is white!"<<endl;
return 0;
}

写出下面题目的程序代码(C++) 并且输入输出都截个图 谢谢~
map[p[i].x - minx2 + 5][p[i].y - miny2 + 5]=1; \/\/将集合A往右下角移 } }

C++:大佬,下面题目咋写(要有点注释)?
else if(n>500 && n<1001)s=n*1.05;\/\/n+n*5 else if(n>1000 && n<1501)s=1.1*n-50;\/\/1000*5%+(n-1000)*10%+n else if(n>1500 && n<2001)s=1.15*n-125;\/\/1000*5%+(1500-1000)*10%+(n-1500)*15%+n cout.setf(ios::fixed);\/\/用定点格式输出浮点数据 cout.preci...

墨水扩散问题,请问下面这道题用C++怎么写?
\/\/先输入行数和列数,再依次输入地图 \/\/比如 \/\/3 4 \/\/1 0 1 0 \/\/1 1 1 1 \/\/0 1 2 1 include<iostream> using namespace std;int main() { \/\/freopen("in.txt","r",stdin);\/\/重定向输入流\/\/in.txt 建在程序所在的文件夹里 int M,N;scanf("%d%d",&M,&N);int maps[M...

希望精通C++的同学指教一下,帮我做下面的题目
using namespace std;int main(){ double total_money,pay_money;\/\/定义变量,输入顾客的购物金额,输出实际付款额 double discount; \/\/定义变量,存放打扣率 cout<<"请输入总的购物金额(大于0):RMB ";cin>>total_money;if(total_money<100)discount=1.0;else if(total_money >= 100 && to...

C++编程序题:(一)定义一个圆类XY,计算圆的面积和周长(). 要求:1.该...
下面这段代码每行都有注释,除了实现题中的功能,还有一些基础的示例对理解C++的类很有帮助,具体代码如下: 【程序代码】#include <iostream> \/\/控制台操作头文件 class XY \/\/定义一个类{private: \/\/私有成员关键字 double R; \/\/圆的半径 public: \/\/公开成员关键字 XY(){...

用c++实现,,,下面是题目。 \/*AB两个人玩一个取石子游戏,一共有n (n...
第1轮21 只要对方不出错,谁碰到21,16,11,6,1,谁就输定了。所以,只要让计算机后手,再采取正确的方式,就能成为“常胜将军”。据此分析进行算法设计就是很简单的工作,编程实现也十分容易。程序说明与注释 include <stdio.h> void main(){ int a=21,i;printf("Game starts:\\n");while(a...

C++编程问题
第1题:class Date{ public:int y,m,d;void init(int year,int month,int day) \/\/init函数应加上相应的形参 { y=year; m=month; d=day;if(m>12||d>30){exit(0);} \/\/测试输入的日期和月分是否合法。} int subDate(Date d) \/\/日期相减函数 {\/\/因为一年有360天,一个月有...

用c++编程 输入一个整数n,输出1!+2!+3!+……+n! 急急急急急!
先写出一个如下的函数:int fun(int n){ int s=1;for(int i=1;i<=n;i++)s*=i;return s;} 然后在主函数中调用反复调用它 int main(){ int n;while(cin>>n){ int sum=0;for(int i=1;i<=n;i++){ sum+=fun(i);} cout<<sum<<endl;} } ...

c++编程题 编写函数实现求n!,主程序要求输入n的值,用函数调用的方式求n...
using namespace std;int fact(int n); int main(){ int n; cout<<"求n!,请输入n:\\n";cin>>n; cout<<fact(n)<<endl;return 0;} \/\/下面是使用递归函数求n!int fact(int n){ if(n==1) return(1);else return(fact(n-1)*n)} ...

C++语言编程问题 下面的代码中string,string str[11], char m=a.leng...
这段代码的意思是把输入的数字替换为汉语(拼音)输出:for(int i=0;i<a.length();i++)for是循环 在循环中,int类型的i作为计数变量,初始值为0;i

相似回答