我必须生成范围内的数字 [-100; +2000] 在 c++ 中。如果只有正数可用,我该如何用 rand 做到这一点?有什么快速的方法吗?
生成 0 到 2100 之间的随机数,然后减去 100。
快速谷歌搜索发现了一篇关于使用 Rand() 的看起来不错的文章。它在文章末尾包含了用于处理特定范围的代码示例。
您可以使用 C++ TR1 随机函数生成所需分布的数字。
std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int_distribution<int> dist(-100,2100);
std::cout << dist(rng) << '\n';
生成 0 到 2100 之间的随机数,然后减去 100。
这是代码。
#include <cstdlib>
#include <ctime>
int main()
{
srand((unsigned)time(0));
int min = 999, max = -1;
for( size_t i = 0; i < 100000; ++i )
{
int val = (rand()%2101)-100;
if( val < min ) min = val;
if( val > max ) max = val;
}
}
你能生成一个 0-2100 之间的数字并减去 100 吗?
在 C++0x 中,他们将对此进行增强,以通过标准库为其提供更好的支持。
目前我的 C++ 语法有点生疏,但你应该编写一个带有两个参数的函数:
size
和 offset
。
因此,您可以使用给定的
size
作为最大值生成数字,然后为其添加(负)偏移量。
该函数如下所示:
int GetRandom(int size, int offset = 0);
并且在您的情况下会被调用:
int myValue = GetRandom(2100, -100);
我知道这可能为时已晚,但你就可以了:
从数学上来说: 令
a1
和 an
为要生成的伪随机整数的最小值和最大值 - 那么这些整数的可能值与添加 0
后在
an - a1
和
a1
之间的值相同这些值中的每一个。
例如,
-100
和 2000
之间的随机整数,请生成 0
和 2100
(2000 - (-100) = 2100) 之间的随机整数,然后将 -100
添加到每个结果数字。100
和 2000
之间的随机整数,请生成 0
和 1900
之间的随机整数 (2000 - 100 = 1900),然后将 100
添加到每个结果数字。
您可以尝试使用较小的
a1
和 an
值来尝试此公式,以更好地理解这个想法。