C++ 如何生成仅包含1到6位数字的4位数字?
我正在寻找一种方法来生成一个4位数的数字,数字从1到6,比如123412513243。。。等等 我希望它用于我的C++ 如何生成仅包含1到6位数字的4位数字?,c++,c++11,C++,C++11,我正在寻找一种方法来生成一个4位数的数字,数字从1到6,比如123412513243。。。等等 我希望它用于我的MastermindDigits类中的makeDigitToguess()方法。每次用户启动游戏时,应调用此函数并生成一个仅包含1到6位数字的4位数字 这就是我迄今为止所尝试的: srand(time(0)); cout << "RANDOM NUMBER: " << (rand() % 6 + 1) <
MastermindDigits
类中的makeDigitToguess()
方法。每次用户启动游戏时,应调用此函数并生成一个仅包含1到6位数字的4位数字
这就是我迄今为止所尝试的:
srand(time(0));
cout << "RANDOM NUMBER: " << (rand() % 6 + 1)
<< (rand() % 6 + 1)
<< (rand() % 6 + 1)
<< (rand() % 6 + 1) << endl;
srand(时间(0));
cout你基本上是在以6为基数生成一个数字,除了用“6”替换数字“0”。(或者将1添加到所有)。因为它是一个4位数字,所以有6*6*6*6的可能性=1296。因此,在[01296)
范围内生成一个数字,并以6为基数打印该数字。const unsigned sup(6*6*6*6);
const unsigned sup(6 * 6 * 6 * 6);
unsigned base6[sup];
for (unsigned i(0); i < sup; ++i)
{
base6[i] = (i / 216 % 6) * 1000 +
(i / 36 % 6) * 100 +
(i / 6 % 6) * 10 +
i % 6;
}
无符号base6[sup];
for(无符号i(0);i
那么您的随机数是base6[rand()%sup]
为什么不简单一点,就像您刚才提到的那样
std::string number;
for(int i = 0; i < 4; i++) {
number += rand() % 6 + 1;
}
std::cout << std::stoi(number);
std::字符串编号;
对于(int i=0;i<4;i++){
数字+=兰德()%6+1;
}
std::cout我建议使用C++11的std::uniform\u int\u分布来实现此解决方案
#include <iostream>
#include <random>
#include <iomanip>
int generateFour()
{
int result=0;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 6);
for (int n=0; n<4; ++n)
{
result=result*10+dis(gen);
}
return result;
}
int main()
{
std::cout << std::setfill('0') << std::setw(4)
<< generateFour() << std::endl;
return 0;
}
#包括
#包括
#包括
int generateFour()
{
int结果=0;
std::随机_装置rd;
标准:mt19937 gen(rd());
标准:均匀分布分布图(1,6);
对于(int n=0;n我假设您的任务与我相同(PAD2),因此我可以帮助您。
这是我的函数makedigittoguess:
int randomNumber = 0;
int x = 3; //Numbers to guess
for (int i = 0; i <= x; i++) {
randomNumber = rand() % 6 + 1;
digits[i] = randomNumber;
}
int randomNumber=0;
int x=3;//要猜测的数字
对于(int i=0;我请格式化您的代码。THX如果您将其构建为x=a*1000+b*100+c*10+D,则可以直接生成最终的4位整数。这些数字是否应该是随机的?是的,它们应该是随机的,而此代码可以回答问题,提供有关为什么和/或如何回答问题的其他上下文将显著提高其l长期值。请您的答案添加一些解释。该条件不起作用。例如,5%10000是5。它只打印一个数字。是的,我的错误,修复我不太了解它,所以我必须用谷歌搜索它。从未使用过这些关键字。感谢这只是靠运气起作用。函数返回一个double
。它将只使用result=result*10+dis(gen);
会更有意义。事实上,使用result=result*10+dis(gen);
会更好。谢谢。)
int randomNumber = 0;
int x = 3; //Numbers to guess
for (int i = 0; i <= x; i++) {
randomNumber = rand() % 6 + 1;
digits[i] = randomNumber;
}