我正在尝试使用srand和rand获得1:16的随机数字。代码按预期工作,但最多只能进行第12次迭代。为什么?

时间:2015-03-17 16:02:38

标签: c++ find srand

#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <iterator>


int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;   

    int ord[] = {
             0,0,0,0,
             0,0,0,0,
             0,0,0,0
            };

    srand(time(NULL));

    int i = 0;

    do{
        int r = rand() % 16 + 1;
        bool exista =( find(begin(ord), end(ord), r) != end(ord));
        if (!exista){
            ord[i] = r;
            cout << ord[i] << endl;
            i++;
            cin.get();
        }

    } while (find(begin(ord), end(ord), 0) != end(ord));
    return 0;
}

在12个数字之后,程序退出并且我无法理解为什么,它应该在16次迭代之后。

2 个答案:

答案 0 :(得分:1)

原因是ord中只有12个零,当它们用完时(在你的情况下填充了从1到16的唯一值,循环停止(因为没有更多的零要找。) / p>

ord的声明更改为

int ord[] = {
         0,0,0,0,
         0,0,0,0,
         0,0,0,0,
         0,0,0,0
        };

int ord[16] = {0};

顺便说一句,如果你只是想随机改变这些数字,我建议你使用<algorithm>中的random_shuffle

答案 1 :(得分:1)

您定义的数组大小为12,并且您使用随机整数ord[]填充数组r。即使您将随机数生成器设置为运行16次迭代,您的数组也将在第12次迭代时填充。只需增加数组大小。