请教关于组合的一道题

GeKaede 2005-05-27 10:23:18
有800个红球,200个白球.从其中取出100个.
输出红球及白球的个数.


请大家给个思路.
...全文
146 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Denice 2005-05-27
  • 打赏
  • 举报
回复
貌似没有把当成两种情况吧!!!
我是计算从这1000个球中取出100个的情况
在每次取得这100个时、你一次取出所有的100个或者你一个一个的取最后取出100个他们应该是一样的道理、、、看看下面的修改(改的不是很正规、)、、


#include <iostream.h>
#include <stdlib.h>
#include <time.h>

int getball(double probability); //按照一定的几率取得一个球
void go();

int main()
{
srand(time(0));
cout <<"每次取得的情况" << endl;
cout << "red white" << endl;

for(int i = 0; i < 100; i++)
{
go();
}

system("pause");
return 1;
}

int getball(double probability)
{
int temp = rand() % 100;

if (temp <= 100 * probability)
{
return 1; //表示取得传入几率的球
}
else
{
return -1; // 表示没有取得传入几率的球
}
}

void go()
{
int red = 800; //红球的个数
int white = 200; //白球的个数

int red_count = 0; //纪录取得的球个数
int whi_count = 0;
int temp = 0;

double red_proba = (double)red / ((double)red + (double)white); //第一次取得红球的几率

for (int i = 0; i < 100; i++)
{
temp = getball(red_proba); //按几率取得一个球

if(temp == 1) //取得红球
{
red_count++;
red--;
red_proba = (double)red / ((double)red + (double)white); //重新计算机率
}
else
{
whi_count++;
white--;
red_proba = (double)red / ((double)red + (double)white);
}
}

cout << red_count << " " << whi_count << endl;
}
GeKaede 2005-05-27
  • 打赏
  • 举报
回复
To Denice:

你给出的方法是一个一个的取球,我不确信这种方法得出的概率分布结果对不对.
如果是取出100个球排成一排,你的显然是对的.

例如我从3个球中取出2个,先取第一个球再取第二个球,与先取第二个球与再取第一个球,其实只是一个组合. 而现在却把它当成了两种情况.
Denice 2005-05-27
  • 打赏
  • 举报
回复
重复一下取的次数不就可以了吗??
又不说清楚一点、、、还以为只取一次、、、、
GeKaede 2005-05-27
  • 打赏
  • 举报
回复
球没有编号
只要输出每次结果就行了,不需要进行统计分析.

当然,概率分布要符合实际情况,当抽取的次数足够多时,红白球总和的比例应该接近800:200
Denice 2005-05-27
  • 打赏
  • 举报
回复
mark
Denice 2005-05-27
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <stdlib.h>
#include <time.h>

int getball(double probability); //按照一定的几率取得一个球

int main()
{
int red = 800; //红球的个数
int white = 200; //白球的个数

int red_count = 0; //纪录取得的球个数
int whi_count = 0;
int temp = 0;

double red_proba = (double)red / ((double)red + (double)white); //第一次取得红球的几率

srand(time(0));

for (int i = 0; i < 100; i++)
{
temp = getball(red_proba); //按几率取得一个球

if(temp == 1) //取得红球
{
red_count++;
red--;
red_proba = (double)red / ((double)red + (double)white); //重新计算机率
}
else
{
whi_count++;
white--;
red_proba = (double)red / ((double)red + (double)white);
}
}

cout << "there are " << red_count << "red balls、and " << whi_count << "white balls in the 100 ball" << endl;

system("pause");
return 1;
}

int getball(double probability)
{
int temp = rand() % 100;

if (temp <= 100 * probability)
{
return 1; //表示取得传入几率的球
}
else
{
return -1; // 表示没有取得传入几率的球
}
}
useresu 2005-05-27
  • 打赏
  • 举报
回复
模拟随机抽取?
晕了,
给出个分布?

mark
useresu 2005-05-27
  • 打赏
  • 举报
回复
恩,球没有编号吧?
GeKaede 2005-05-27
  • 打赏
  • 举报
回复
我是意思是要写个程序,模拟随机抽取过程.
比如,让程序打印出5000次每次抽取的结果.即每次红球多少个,白球多少个.
foochow 2005-05-27
  • 打赏
  • 举报
回复
答案应该就是一楼的,后面改成白99红0

shine51151 2005-05-27
  • 打赏
  • 举报
回复
楼上的大哥 你不会计数吗? 是101种吧
dhfly 2005-05-27
  • 打赏
  • 举报
回复
不太明白题意,随即抽的话结果应该有100种吧:
白:0 红100
白1红99
白2红98
白3红97
……
白100红0

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧