使用C ++ randint生成四位数

时间:2017-02-17 19:46:35

标签: c++ random

我在学习Stroustrup的书"编程:使用C ++的原则和实践时使用头文件std_lib_facilities.h" 我在前面的章节中。在第5章的练习13中,我熟悉了randint()函数,用于制作我的" Cows and Bulls"游戏(上一个练习)更有趣,但是当我使用这个函数时,它有时会生成比迭代循环次数更多的数字。

来自std_lib_facilities.h

inline int randint(int max) { return rand()%max; }

这是我的代码:

vector<int> answer;
for (int i = 0; i<4; ++i) { 
    int answer_digit=randint(10);
    answer.push_back(answer_digit); 
}
for (int i = 0; i < 4; ++i) std::cout << answer[i];
_getch();
std::cout << std::endl;
例如,在我的情况下,它为第一个数字提供63109,然后是4706,然后是5423,然后再提供7个四位数字,然后是5位数字,即94410.为什么会发生这种情况?这是库中函数的错误还是我自己的代码中的一个愚蠢的错误?感谢。

(我知道我可以通过使用种子获得更逼真的随机性,但这与我的问题无关(至少,我的猜测!)。

1 个答案:

答案 0 :(得分:1)

要生成4个数字而不重复,随机随机播放10 0 -9的数组并取前4个。

对于随机随机播放,将第一个用0到N-1的随机索引交换(因此可能与自身进行无操作交换)将第二个交换为1到N-1,将第二个交换为2到N-1,等等。如果不允许前导0,则特殊情况为第一个数字。