C++ 生成具有特定规则的两个随机数
我正在编写一个代码,生成两个随机整数,并显示第一个数除以第二个数的结果。 我希望第一个整数大于第二个整数,不带余数的除法结果是一个整数 我尝试使用do-while循环并继续更改整数,直到它生成我想要的数字C++ 生成具有特定规则的两个随机数,c++,random,C++,Random,我正在编写一个代码,生成两个随机整数,并显示第一个数除以第二个数的结果。 我希望第一个整数大于第二个整数,不带余数的除法结果是一个整数 我尝试使用do-while循环并继续更改整数,直到它生成我想要的数字 std::random_device device; std::mt19937 rd(device()); std::uniform_int_distribution<int> random(1, 100); int firstNumber; int secondNumber;
std::random_device device;
std::mt19937 rd(device());
std::uniform_int_distribution<int> random(1, 100);
int firstNumber;
int secondNumber;
do
{
firstNumber = random(rd);
secondNumber = random(rd);
}
while ((firstNumber < secondNumber) && (firstNumber % secondNumber != 0));
int result = firstNumber / secondNumber;
//print the integer to check it
std::cout << firstNumber << std::endl;
std::cout << secondNumber << std::endl;
每次我运行这段代码时,第一个整数总是比第二个整数多。但是除法结果将是余数您的条件检查中有一些错误。但另一种方法是根据第二个数字绘制的结果生成第一个数字:
std::uniform_int_distribution<int> random(1, 50);
secondNumber = random(rd);
{
std::uniform_int_distribution<int> random(2, 100 / secondNumber);
firstNumber = random(rd) * secondNumber;
}
这消除了条件检查的需要。条件检查中有一些错误。但另一种方法是根据第二个数字绘制的结果生成第一个数字:
std::uniform_int_distribution<int> random(1, 50);
secondNumber = random(rd);
{
std::uniform_int_distribution<int> random(2, 100 / secondNumber);
firstNumber = random(rd) * secondNumber;
}
这样就不需要进行条件检查。您的循环检查是错误的!试试这个
do
{
firstNumber = random(rd);
secondNumber = random(rd);
} while ((firstNumber <= secondNumber) || (firstNumber % secondNumber != 0));
您需要一直运行循环,直到两个条件都满足,因此如果其中一个或另一个不满足,请继续尝试
另外,如果你有你的循环检查是错误的!试试这个
do
{
firstNumber = random(rd);
secondNumber = random(rd);
} while ((firstNumber <= secondNumber) || (firstNumber % secondNumber != 0));
您需要一直运行循环,直到两个条件都满足,因此如果其中一个或另一个不满足,请继续尝试
还有,如果你有
随机选取第一个数字:num1
随机选择第二个大于1的数字:num2
较大的数字是num1*num2。较小的数字是num1。除法的结果是num2
随机选取第一个数字:num1
随机选择第二个大于1的数字:num2
较大的数字是num1*num2。较小的数字是num1。除法的结果是num2
您可以使用两种分布:一种是在生成第一个数字后创建的,并且第一个数字减去1作为上限。那么你就不需要为那个部分创建循环了。如果条件为false,while循环就会停止。如果firstNumber>=secondNumber或余数为零,则条件为false!a&&b=!a | | |!b在你的情况下更换操作员大约一个小时!a | | b=!a&&!b、 当然,构造条件要比期望两个随机数遵守它更容易:secondNumber=randomrd;firstNumber=secondNumber*randomrd.@Someprogrammerdude是的,但是第一个发行版应该是2100,而不是1100。否则,您将面临第一个随机数滚动1,然后第二个分布变为1,0的风险,这是错误的。第一个数字=5第二个数字=3:5<3&&5%3!=0==false&&true==false。您希望这两个条件都为false。您可以使用两个分布:一个是在生成第一个数字后创建的,并且第一个数字减去1作为上限。那么你就不需要为那个部分创建循环了。如果条件为false,while循环就会停止。如果firstNumber>=secondNumber或余数为零,则条件为false!a&&b=!a | | |!b在你的情况下更换操作员大约一个小时!a | | b=!a&&!b、 当然,构造条件要比期望两个随机数遵守它更容易:secondNumber=randomrd;firstNumber=secondNumber*randomrd.@Someprogrammerdude是的,但是第一个发行版应该是2100,而不是1100。否则,您将面临第一个随机数滚动1,然后第二个分布变为1,0的风险,这是错误的。第一个数字=5第二个数字=3:5<3&&5%3!=0==false&&true==false。您希望这两个条件都为false。