13

我必须生成[-100; 范围内的数字;+2000]在 C++ 中。如果只有正数可用,我怎么能用 rand 做到这一点?有什么快速的方法吗?

4

7 回答 7

39

生成一个介于 0 和 2100 之间的随机数,然后减去 100。

一个快速的谷歌搜索出现了一篇关于使用 Rand() 的不错的文章。 它包括在文章末尾处理特定范围的代码示例。

于 2010-09-30T12:58:26.427 回答
7

生成一个 0 到 2100 之间的随机数,然后减去 100。

于 2010-09-30T12:59:04.240 回答
7

您可以使用 C++ TR1 随机函数生成所需分布的数字。

std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int_distribution<int> dist(-100,2100);

std::cout << dist(rng) << '\n';
于 2010-09-30T15:24:11.887 回答
4

这是代码。

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

}
于 2010-09-30T13:04:37.267 回答
3

你能从 0-2100 中生成一个数字并减去 100 吗?

于 2010-09-30T12:58:37.283 回答
1

在 C++0x 中,他们将对此进行增强,以便通过标准库为它提供更好的支持。

http://www2.research.att.com/~bs/C++0xFAQ.html#std-random

于 2010-09-30T13:55:26.400 回答
0

目前我的 C++ 语法有点生疏,但您应该编写一个带有两个参数的函数:sizeoffset.

因此,您生成具有给定size最大值的数字,然后将(负)偏移量添加到它。

该函数如下所示:

int GetRandom(int size, int offset = 0);

并会在您的情况下被调用:

int myValue = GetRandom(2100, -100);
于 2010-09-30T13:07:09.793 回答