C++ c++;允许用户选择范围的随机数生成器
我必须想出一个随机数生成器,它将生成5个随机数,在用户输入的两个数字范围内。示例:用户首先输入1,然后输入10。生成的随机数可以是2,3,4,5,8。我可以让它给我5次1个随机数,但不是5个不同的随机数。请看下面。感谢您的帮助。谢谢C++ c++;允许用户选择范围的随机数生成器,c++,random,numbers,range,generator,C++,Random,Numbers,Range,Generator,我必须想出一个随机数生成器,它将生成5个随机数,在用户输入的两个数字范围内。示例:用户首先输入1,然后输入10。生成的随机数可以是2,3,4,5,8。我可以让它给我5次1个随机数,但不是5个不同的随机数。请看下面。感谢您的帮助。谢谢 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main () { int num1, num2,
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main ()
{
int num1, num2, randNum, seed;
cout << "enter number 1.\n";
cin >> num1;
cout << "enter number 2.\n";
cin >> num2;
seed = num1 - num2;
randNum = rand() % seed + 1;
cout << randNum << "\n";
cout << randNum << "\n";
cout << randNum << "\n";
cout << randNum << "\n";
cout << randNum << "\n";
return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int num1,num2,randNum,seed;
cout>num1;
cout>num2;
种子=num1-num2;
randNum=rand()%seed+1;
coutrandNum
不会在每次调用cout
时进行修改,因此它始终显示相同的值。如果希望它工作,则需要使用如下循环
for(int i=0;i<5;i++){
randNum = rand() % seed + num2;
cout << randNum << "\n";
}
for(int i=0;i您正在生成一个随机数,然后将其打印五次。生成值的是代码rand()%seed+1
。您将该值保存在randNum
中并打印五次。您可以将代码rand()%seed+1
多次运行以获得多个值
在此上下文中,您没有正确使用单词“seed”。在伪随机数生成器的上下文中,seed是生成器的初始状态。rand()
使用的pRNG的种子设定是通过将种子值传递给srand()
(“s”代表种子)来完成的
无论如何,你不应该使用<代码> RAND()/CUT>。而使用C++ <代码> <代码>库。使用这个库,你可以很容易地在用户定义的范围内创建值。
使用
生成随机值的基本方法使用两个组件:一个是“随机性”源,即pRNG,我将其称为引擎,另一个是从引擎中获取随机性并使用它在特定范围内随机生成值的对象
#include <iostream>
#include <random>
int main() {
int min, max;
std::cout << "enter number 1.\n";
std::cin >> min;
std::cout << "enter number 2 (greater than number 1).\n";
std::cin >> max;
std::uniform_int_distribution<> make_number_in_range(min, max);
std::mt19937 engine;
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
}
“我可以让它给我5次1个随机数,但不是5个不同的随机数。”我想回答问题的这一部分。我实际上没有看到他在最小值上也犯了错误。这太好了,谢谢!但是如果num2大于num1,我该怎么办?我们还没有涵盖循环,所以我认为我不能也不希望使用它们。如果你不想使用循环,你可以复制/粘贴两个l您可以使用一个条件来检查和切换,例如:if(num2>num1){int temp=num1;num1=num2;num2=temp;}
尝试设置时间,以便在每次启动程序时获得不同的值。srand(time(NULL));我同意您的解决方案更好,但对于似乎刚刚开始编码的人来说可能太复杂了。@meneldal呃,种子设定更复杂,但请注意,指定所需的范围更简单。我建议初学者使用uniform\u int\u distribution
而不是试图从中计算自己的分布rand()
@meneldal:请注意,在原始代码中,标识符“seed”没有用于种子值,下一个不可避免的问题是“为什么我的程序每次都产生相同的数字序列,而它们本应是随机的”…然后出现srand(时间(0));
(和一个额外的头)在调用rand()
之前,每次程序执行只能解释一次;很快使用rand()
看起来也越来越复杂了……我也看到了这一点,当我注意到它时,我应该编辑我的答案。我同意这是一个非常糟糕的变量名称。
#include <iostream>
#include <random>
int main() {
int min, max;
std::cout << "enter number 1.\n";
std::cin >> min;
std::cout << "enter number 2 (greater than number 1).\n";
std::cin >> max;
std::uniform_int_distribution<> make_number_in_range(min, max);
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
std::mt19937 engine(seed);
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
}