【发布时间】:2011-04-19 08:13:09
【问题描述】:
我必须在 [-100; 范围内生成数字+2000] 在 C++ 中。如果只有正数可用,我怎么能用 rand 做到这一点?有什么快速的方法吗?
【问题讨论】:
标签: c++ random negative-number
我必须在 [-100; 范围内生成数字+2000] 在 C++ 中。如果只有正数可用,我怎么能用 rand 做到这一点?有什么快速的方法吗?
【问题讨论】:
标签: c++ random negative-number
生成一个介于 0 和 2100 之间的随机数,然后减去 100。
通过 Google 快速搜索找到了 decent looking article on using Rand().,它在文章末尾包含了用于处理特定范围的代码示例。
【讨论】:
生成一个介于 0 到 2100 之间的随机数,然后减去 100。
【讨论】:
您可以使用 C++ TR1 随机函数生成所需分布的数字。
std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int_distribution<int> dist(-100,2100);
std::cout << dist(rng) << '\n';
【讨论】:
这里是代码。
#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;
}
}
【讨论】:
val 每次都是-100,那么生成的max 将是错误的。最低限度同上。
(rand()%2101)-100,那会比可编译、可运行的示例更好吗?请。
你能生成一个 0-2100 的数字并减去 100 吗?
【讨论】:
在 C++0x 中,他们将对此进行增强,以便通过标准库为其提供更好的支持。
【讨论】:
目前我的 C++ 语法有点生疏,但您应该编写一个带有两个参数的函数:size 和 offset。
因此,您以给定的size 作为最大值生成数字,然后将(负)偏移量添加到它。
函数如下所示:
int GetRandom(int size, int offset = 0);
在你的情况下会被调用:
int myValue = GetRandom(2100, -100);
【讨论】: