好的,很可能它会被标记为重复,但我正在寻找答案而找不到类似的东西。 问题是:我想在特定范围内生成随机数[即min_value到max_value]并使用特定步骤。对于第一部分,答案是:
int random_value = rand() % max_value + min_value;
该步骤如何定义?我想上面提到的解决方案导致步骤1.正确吗?如果我想用步骤2(例如2,4,...,16)生成数字,我该怎么办?
答案 0 :(得分:3)
这应该做你想要的:
int GetRandom(int max_value, int min_value, int step)
{
int random_value = (rand() % ((++max_value - min_value) / step)) * step + min_value;
return random_value;
}
答案 1 :(得分:2)
你的第一步"由于它患有modulo bias,所以是不明智的。
介绍"步骤"这是一个简单的算术问题,您可以在较小范围min_value / step
到max_value / step
上生成一个随机数,并将其乘以您所需的步骤(random_value * step
)。
所以:
#include <stdint.h>
#include <stdlib.h>
int random_range( int min_value, int max_value )
{
// Fix me
return rand() % max_value + min_value;
}
int random_range_step( int min_value, int max_value, int step )
{
return random_range( min_value / step, max_value / step ) * step ;
}
...
// (e.g. 2, 4, ..., 16)
int random_value = random_range_step( 2, 16, 2 ) ;