#include <iostream>
using namespace std;
int main(){
int results[] = {1, 2, 3, 4, 5};
cout << results << endl;
return 0;
}
我每次都想要不同的结果。 例如:第一次1秒钟2等 有什么帮助吗?
答案 0 :(得分:5)
一种简单的方法是使用当前时间为基本随机数生成器播种,然后使用rand()减少模数可能结果的数量,从results
中选择随机元素
#include "iostream"
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
int results[] = {1, 2, 3, 4, 5};
srand(time(NULL));
cout << results[rand()%(sizeof(results)/sizeof(results[0]))] << endl;
return 0;
}
答案 1 :(得分:2)
你可以这样做。您必须使用例如表示当前时间的整数来播种随机数。因为如果你不调用srand,程序将每次以相同的方式继续对数组进行洗牌。因此,某些程序甚至会记录该种子,因此它们可以使用相同的随机值运行程序。请注意,代码要求您使用兼容c ++ 11的编译器进行编译。在我的系统时间(0)给出了自1970年januari以来的秒数。因此,我的程序输出每次都会给我不同的结果。
另请注意,如果种子是相同的,那么你总是得到同样的洗牌。因此,虽然你每秒都会得到不同的改组,结果可以根据time(0)
的值来预测,并且为了获得真正高质量的随机数(从而随机改组),你必须做一些更难以预测的事情。
#include <iostream>
#include <vector>
#include <algorithm>
int main (){
std::srand(time(0));
std::vector<int> vec = { 1,2,3,4,5 };
std::random_shuffle( vec.begin(), vec.end() );
for ( int i = 0; i < vec.size(); i++)
std::cout << vec[i]<< std::endl;
return 0;
}