概率问题

runall 2005-01-17 10:40:52
我需要以概率x(0=<x<=1)来执行一段代码,该用什么方法?
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kobefly 2005-01-18
  • 打赏
  • 举报
回复
楼主英明啊

正解
runall 2005-01-18
  • 打赏
  • 举报
回复
下面是我自己写的函数,中心思想是将0和1之间的概率数转化为大于等于1的整数,通过连续乘10,记住扩大的倍数,然后在1和倍数之内产生随机数来决定是否执行代码。举个例子假设执行某段代码的概率为0.015,此数乘以1000得到整数15,然后在1到1000之内产生随机数r,r<=15就执行代码,否则不执行。
欢迎大家讨论
bool IsRun(float m_fX)
{
if(m_fX >= 1.0f) //概率大于等于1,肯定执行
{
return true;
}
else if(m_fX <= 0.0f) //概率小于等于0,肯定不执行
{
return false;
}
else //概率在0和1之间
{
float fTemp = 0.0f;
fTemp = m_fX;
CString strValue = _T("");
char buff[50];
_gcvt(fTemp, 10, buff); //转换为字符串
strValue = buff;
strValue.TrimLeft();
strValue.TrimRight();

int nLength = strValue.GetLength();
if(nLength > 2)
{
}
else
{
return false;
}

int z = 1;
for(int i = 0; i < nLength - 2; ++i)
{
z *= 10;
} //z是概率数转变为整数的10倍数

int nX = 0;
nX = _ttoi(strValue.Right(nLength - 2));

srand(GetTickCount());
int nTemp = (rand() % z) + 1;
if(nTemp <= nX)
{
return true;
}
else
{
return false;
}
}
}
zhou_lion 2005-01-18
  • 打赏
  • 举报
回复
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

void RunFunction(float x)
{
cout << "产生的随机数: " << x;
}

void RunOrStop(float n)
{
float x;
x=float(rand()%100)/(float)100;
if(x<n)
RunFunction(x);
else
{;}
}

void main()
{
float i;
srand((unsigned)time(NULL));
cin >> i;
RunOrStop(i);
}
han___ 2005-01-17
  • 打赏
  • 举报
回复
应该划分成几个范围吧
如0-0.1 -0.2等

sasdaa 2005-01-17
  • 打赏
  • 举报
回复
用随机数,随即产生一个0-1的随即书,如果大于x就执行.小于x就不知行

64,686

社区成员

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

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