请原谅我,如果它很明显,但我在生成范围内真正随机整数的想法上遇到了一些麻烦,我刚刚开始使用C ++。 我目前的代码:
int start = rand() % 30 + 20;
总是会产生31,因为这是" psuedo-random"整数。它也超过30! 可以通过这种方式实现真正的随机数,还有,我如何实际生成范围内的数字?
-Jai
答案 0 :(得分:2)
普通计算机只能生成伪随机数,
但不意味着每次生成的数字都是相同的
你的问题是你忘了srand
,那兰德并不是那么好,
并且公式应为(rand() % 10) + 20
。
对于比rand更好的发电机,请参见例如。 Mersenne Twister(包括<random>
)
对于“真正的”随机数,您需要特殊的硬件。
答案 1 :(得分:1)
在C ++中,您可能会这样做:
#include <iostream>
#include <random>
#include <chrono>
class Rand_int {
public:
Rand_int(int low, int high)
: re(std::chrono::system_clock::now().time_since_epoch().count()),
dist{low,high} { }
int operator()() { return dist(re); }
private:
std::default_random_engine re;
std::uniform_int_distribution<> dist;
};
int main() {
Rand_int rnd {20, 30};
for (int i=0; i<10; i++)
std::cout << rnd() << '\n';
return 0;
}