#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次迭代之后。
答案 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次迭代时填充。只需增加数组大小。