C++ 如何生成仅包含1到6位数字的4位数字?

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) <

我正在寻找一种方法来生成一个4位数的数字,数字从1到6,比如123412513243。。。等等

我希望它用于我的
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;

}