这个问题不适用于任何特定的访谈或任务,只是一个问题出现在Quora上,但没有人回答。 你将如何实现一个在75%的时间内返回真实的函数(真正的任何语言)。统计数据不是我的强项,对我来说,我会这样做,但我有一个错误的是
void retTrue(){
srand(time(NULL));
if( (rand() % 4) == 0 ) return true;
else return false;
}
答案 0 :(得分:6)
你所拥有的将在25%的时间内返回true
。
这个怎么样?
bool retTrue()
{
srand(time(NULL));
if ( (rand() % 4) == 0 ) return false;
else return true;
}
但是这也会在75%的时间内返回true
- 每隔四次,就像发条一样:
static int counter = 1; // global or out-of-scope variable
bool retTrue_anotherOne()
{
bool returnValue;
if ((counter % 4) == 0)
counter = 0;
returnValue = false;
else
returnValue = true;
counter++;
return returnValue;
}
或者这也会在75%的时间内返回true
- 连续75 true
,然后25 false
s:
static int counter = 0; // global or out-of-scope variable
bool retTrue_anotherOne()
{
bool returnValue;
if (counter < 75)
returnValue = true;
else
returnValue = false;
counter = (counter + 1) % 100;
return returnValue;
}
这完全取决于你想要的“75%的时间”的分布情况!
答案 1 :(得分:3)
这是您的功能的一个潜在问题。 rand()
将返回0
和RAND_MAX
之间的随机整数,虽然没有真正的保证,但RNG可以在此时间间隔内生成均匀分布。但是,当您使用模运算符时,如
(rand() % 4) == 0
你只看随机数的最后两位。问题是,在一些随机数发生器中,低阶位的随机性可能非常弱。获得在25%的时间内发生的一系列独立随机事件的更安全的方法是
((double) rand() / (double) RAND_MAX) < 0.25
rand()
作为整个区间[0,RAND_MAX]
的元素的随机性比单个位的随机性更可靠。
答案 2 :(得分:0)
总结评论中的建议:
将你的RNG种在某个地方:
srand(time(NULL));
然后功能很简单:
bool retTrue(){
return (rand()%4 != 0);
}
答案 3 :(得分:0)
你不想在函数内部调用srand。 time()的分辨率为1秒。如果我在不到一秒钟内调用该函数100次,我每次都会得到相同的结果。
第二兰特通常不是一个非常好的随机数发生器,你不可能从中得到完美的75%比率。
第三,你的返回类型是void,除了编译器错误之外不会返回任何内容。
怎么样:
bool retTrue(){
static unsigned int n = 0;
n++;
return n % 4 != 0;
}
没有提及它需要随机。
答案 4 :(得分:0)
为什么不在java中使用Random Number Generator
生成数字。我认为这应该打印True
给定rand()
75%的时间生成概率相等的数字。如果这是错误的话,请纠正我
<强>伪代码强>
int generateNumber()
{
Random r = new Random();
int seed = r.nextInt(100);
if(seed < 25){
return false;
}else
{
return true;
}
}