在范围和特定步骤中生成C中的随机数

好吧,很可能它会被标记为重复,但我正在寻找答案,找不到类似的东西。 问题是:我想生成特定范围内的随机数[即min_value到max_value]并使用特定步骤。 第一部分的答案是:

int random_value = rand() % max_value + min_value; 

该步骤如何定义它? 我想上面提到的解决方案导致步骤1.正确吗? 如果我想用步骤2(例如2,4,…,16)生成数字,我该怎么办?

这应该做你想要的:

 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; } 

你的“第一步”是不明智的,因为它有模数偏差 。

引入“步骤”是一个简单的算术问题,您可以在较小范围min_value / stepmin_value / step上生成一个随机数,并将其乘以您所需的步骤( random_value * step )。

所以:

 #include  #include  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 ; } ... // (eg 2, 4, ..., 16) int random_value = random_range_step( 2, 16, 2 ) ;