Algorithm 函数,可在75%的时间内打印true

Algorithm 函数,可在75%的时间内打印true,algorithm,Algorithm,这个问题不是针对任何特定的面试或任务,只是一个出现在Quora上但没有人回答的问题。 您将如何实现一个函数(任何语言)在75%的时间内返回true。统计不是我的强项,对我来说,我会这样做,但我有一点是错误的 void retTrue(){ srand(time(NULL)); if( (rand() % 4) == 0 ) return true; else return false; } 总结评论中的建议: 在某处播种你的RNG: srand(time(NULL))

这个问题不是针对任何特定的面试或任务,只是一个出现在Quora上但没有人回答的问题。 您将如何实现一个函数(任何语言)在75%的时间内返回true。统计不是我的强项,对我来说,我会这样做,但我有一点是错误的

void retTrue(){
    srand(time(NULL));
    if( (rand() % 4) == 0 ) return true;
    else return false;
} 

总结评论中的建议:

在某处播种你的RNG:

srand(time(NULL));
那么函数就简单了:

bool retTrue(){
    return (rand()%4 != 0);
} 

总结评论中的建议:

在某处播种你的RNG:

srand(time(NULL));
那么函数就简单了:

bool retTrue(){
    return (rand()%4 != 0);
} 

您拥有的将在25%的时间内返回
true

这个怎么样

bool retTrue()
{
    srand(time(NULL));
    if ( (rand() % 4) == 0 ) return false;
    else return true;
}
但这也会在75%的时间内返回
true
75%——每四次返回一次,就像时钟一样:

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
s——连续返回75
true
s,然后返回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;
}
static int counter=0;//全局变量或范围外变量
bool retTrue_anotherOne()
{
布尔返回值;
如果(计数器<75)
returnValue=true;
其他的
returnValue=false;
计数器=(计数器+1)%100;
返回值;
}

这完全取决于你想要什么样的“75%的时间”分配

您所拥有的将在25%的时间内返回
true

这个怎么样

bool retTrue()
{
    srand(time(NULL));
    if ( (rand() % 4) == 0 ) return false;
    else return true;
}
但这也会在75%的时间内返回
true
75%——每四次返回一次,就像时钟一样:

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
s——连续返回75
true
s,然后返回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;
}
static int counter=0;//全局变量或范围外变量
bool retTrue_anotherOne()
{
布尔返回值;
如果(计数器<75)
returnValue=true;
其他的
returnValue=false;
计数器=(计数器+1)%100;
返回值;
}

这完全取决于你想要什么样的“75%的时间”分配

您不想在函数内部调用srand。time()的分辨率为1秒。如果我在不到一秒钟的时间内调用该函数100次,每次都会得到相同的结果

第二个随机数发生器通常不是一个很好的随机数发生器,你不可能从中得到一个完美的75%的比率

第三,返回类型是void,它不会返回除编译器错误以外的任何内容

那么:

bool retTrue(){
static unsigned int n = 0;
n++;
return n % 4 != 0;
}

没有提到它需要是随机的。

您不想在函数中调用srand。time()的分辨率为1秒。如果我在不到一秒钟的时间内调用该函数100次,每次都会得到相同的结果

第二个随机数发生器通常不是一个很好的随机数发生器,你不可能从中得到一个完美的75%的比率

第三,返回类型是void,它不会返回除编译器错误以外的任何内容

那么:

bool retTrue(){
static unsigned int n = 0;
n++;
return n % 4 != 0;
}

没有提到它需要是随机的。

为什么不在java中使用
随机数生成器生成数字呢。我认为这应该打印
True
75%的给定时间
rand()
以相同的概率生成数字。如果这是错误的,请纠正我

伪代码

 int generateNumber()
  {
     Random r = new Random();
     int seed = r.nextInt(100);
     if(seed < 25){
     return false;
     }else
     {
     return true;
     }        
  }
int generateNumber()
{
随机r=新随机();
int seed=r.nextInt(100);
如果(种子<25){
返回false;
}否则
{
返回true;
}        
}

为什么不在java中使用
随机数生成器生成数字呢。我认为这应该打印
True
75%的给定时间
rand()
以相同的概率生成数字。如果这是错误的,请纠正我

伪代码

 int generateNumber()
  {
     Random r = new Random();
     int seed = r.nextInt(100);
     if(seed < 25){
     return false;
     }else
     {
     return true;
     }        
  }
int generateNumber()
{
随机r=新随机();
int seed=r.nextInt(100);
如果(种子<25){
返回false;
}否则
{
返回true;
}        
}

您的函数有一个潜在问题
rand()
将返回一个介于
0
rand\u MAX
之间的随机整数,尽管没有真正的保证,但RNG的设计目的是在该间隔内生成均匀分布。但是,当您使用模运算符时,如

(rand() % 4) == 0
您只查看随机数的底部两位。问题是,在一些随机数生成器中,低阶位的随机性可能非常弱。获得25%时间内发生的一系列独立随机事件的更安全方法是

((double) rand() / (double) RAND_MAX) < 0.25
((双)兰德()/(双)兰德_MAX)<0.25

rand()
作为整个间隔
[0,rand\u MAX]
上的一个元素的随机性比单个位的随机性更可靠

您的函数有一个潜在问题
rand()
将返回一个介于
0
rand\u MAX
之间的随机整数,尽管没有真正的保证,但RNG的设计目的是在该间隔内生成均匀分布。但是,当您使用模运算符时,如

(rand() % 4) == 0
您只查看随机数的底部两位。问题是,在一些随机数生成器中,低阶位的随机性可能非常弱。获得25%时间内发生的一系列独立随机事件的更安全方法是

((double) rand() / (double) RAND_MAX) < 0.25
((双)兰德()/(双)兰德_MAX)<0.25

rand()
作为整个间隔
[0,rand\u MAX]
上的一个元素的随机性比单个位的随机性更可靠

为什么这是错误的?假设
rand()
在均匀分布上返回一个随机整数,这似乎很好。可以缩短为
return(rand()%4!=0)
并且返回类型可能应该是bool,否则我看不出有问题。我想你的意思是
return(rand()%4!=0)
?如果您希望在75%的时间内返回
true
true,您不想切换您的return true和return false吗?您还想为RNG设定一次种子,而不是每次和ev