1个硬币,出现正面的概率是p,求构造个概率为0.5的事件

sj13426074890 2011-04-27 04:05:40
rt 思路
...全文
698 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
stushl 2011-12-11
  • 打赏
  • 举报
回复
看到这个题了,楼主有方法了吗
apache57 2011-06-26
  • 打赏
  • 举报
回复
5#所谓样子越多,概率越准,只是证明概率趋近0.5,因为扔硬币得到正面的概率本身就是0.5。不是根据你实际采样的情况算概率的。
2#白得20分。。。
apache57 2011-06-26
  • 打赏
  • 举报
回复
题目不好,扔硬币出现正面的概率应该是0.5,不需要再构造。。。
www_adintr_com 2011-04-28
  • 打赏
  • 举报
回复
把这个硬币抛 m 次, 其中正面向上的次数为 n 的概率为 C(m,n) * pow(p, n) * pow((1 - p), (m - n)). 其中 C 为从 m 中取 n 的组合.
求方程 C(m,n) * pow(p, n) * pow((1 - p), (m - n)) = 0.5 关于 m, n 的整数解即可构造出对应的概率为 0.5 的事件了.
bacmoz 2011-04-27
  • 打赏
  • 举报
回复
简单写个程序测试一下,当然p很小或接近1的时候是有些效率问题的
#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

bool GivenFunction(double p)
{
return (rand() + 0.0) / RAND_MAX < p;
}

bool NewFunction(double p)
{
bool b1, b2;
do
{
b1 = GivenFunction(p);
b2 = GivenFunction(p);
}
while (b1 == b2);
return b1;
}

double testNewFunction(double p, int testCount)
{
int trueCount = 0;
for (int i = 0; i < testCount; ++i)
{
if (NewFunction(p))
++trueCount;
}
return (trueCount + 0.0) / testCount;
}

int main()
{
srand(time(0));
cout << testNewFunction(0.1, 100000) << endl;
return 0;
}
bluesky12312388 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sj13426074890 的回复:]

人家告诉你个P有啥用?
还有让你构造0.33333333的事件?怎么构造
[/Quote]
你不会在加一次独立事件?
bacmoz 2011-04-27
  • 打赏
  • 举报
回复
看我二楼的方法
sj13426074890 2011-04-27
  • 打赏
  • 举报
回复
人家告诉你个P有啥用?
还有让你构造0.33333333的事件?怎么构造
bluesky12312388 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bluesky12312388 的回复:]

样子越多,概率越准。

C/C++ code
void test()
{
int nTotal = 100000000; //这里达到一定数以后,结果必然为0.5
int nPosSide = 0;
for (int i = 0; i < nTotal; ++i)
{
int j = rand() % 2;
if (……
[/Quote]
越多,概率越准。
bluesky12312388 2011-04-27
  • 打赏
  • 举报
回复
样子越多,概率越准。

void test()
{
int nTotal = 100000000; //这里达到一定数以后,结果必然为0.5
int nPosSide = 0;
for (int i = 0; i < nTotal; ++i)
{
int j = rand() % 2;
if ( 0 == j)
{
nPosSide++;
}
}
double nPer = (double)nPosSide / (double)nTotal;
printf("%f\n",nPer);
}
赵4老师 2011-04-27
  • 打赏
  • 举报
回复
if (rand()%2==0) {
//50%出现
} else {
//50%出现
}
pathuang68 2011-04-27
  • 打赏
  • 举报
回复
使用伪随机PN码。
bacmoz 2011-04-27
  • 打赏
  • 举报
回复
扔两次,如果结果相同的话再扔两次(也可只仍一次),。。。
如果不同,则第一次正第二次反的话输出0,另一种情况输出1
turing-complete 2011-04-27
  • 打赏
  • 举报
回复
最多让用几枚硬币?

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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