如何在c ++中执行随机结果作为下面给出的代码?

时间:2013-12-23 10:42:27

标签: c++

 #include <iostream>
 using namespace std;
 int main(){
     int results[] = {1, 2, 3, 4, 5};
     cout << results << endl;
     return 0;
 }

我每次都想要不同的结果。 例如:第一次1秒钟2等 有什么帮助吗?

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;
}