我如何在 c++ 中执行随机结果,如下所示的代码

How can I execute random results in c++ as the code given below?

本文关键字:代码 结果 随机 c++ 执行      更新时间:2023-10-16
 #include <iostream>
 using namespace std;
 int main(){
     int results[] = {1, 2, 3, 4, 5};
     cout << results << endl;
     return 0;
 }

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

一种简单的方法是用当前时间播种基本随机数生成器,然后使用 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;
}

你可以做这样的事情。您必须为随机数设定种子,例如,使用表示当前时间的整数。因为如果你不调用 srand,程序每次都会继续以完全相同的方式洗牌数组。因此,一些程序甚至记录种子,因此它们可以使用相同的随机值运行程序。请注意,代码要求您使用 c++11 兼容的编译器进行编译。在我的系统上,时间(0)给了我自1970年1月以来的秒数。因此,我的程序的输出每次都会给我不同的结果。

还要注意,因为如果种子相同,您将始终获得相同的洗牌。因此,尽管您每秒都会得到不同的洗牌,但考虑到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;
}