• C++ 随机数


    在许多情况下,需要生成随机数。关于随机数生成器,有两个相关的函数。一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。

    下面是一个关于生成随机数的简单实例。实例中使用了 time() 函数来获取系统时间的秒数,通过调用 rand() 函数来生成随机数:

    实例

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    int main ()
    {
    int i,j; // 设置种子
    srand( (unsigned)time( NULL ) );
    /*
    生成 10 个随机数
    */
    for( i = 0; i < 10; i++ )
    {
      // 生成实际的随机数
    j= rand(); cout <<"随机数: " << j << endl;
    }
    return 0;
    }

    当上面的代码被编译和执行时,它会产生下列结果:

    随机数: 1748144778
    随机数: 630873888
    随机数: 2134540646
    随机数: 219404170
    随机数: 902129458
    随机数: 920445370
    随机数: 1319072661
    随机数: 257938873
    随机数: 1256201101
    随机数: 580322989

    使用随机数来发红包:

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    #include <iomanip>
    #include <math.h>
    
    using namespace std;
    
    int main()
    {
        int i, number;
        int best;//手气最佳
        float total;
    
        cout << "请输入红包金额:";
        cin >> total;
        cout << "请输入抢红包人数:";
        cin >> number;
        /* 生成随机数 */
        // 设置种子
        srand((unsigned)time(NULL));
        float a[1024];//保存每个人的随机数。最多支持1024个人抢红包。
        float b[1024];//保存每个人获得的红包金额。
        float suma = 0;//随机数总和。
        float sumb = 0;//红包总和。
        int max = 0;
        for (i = 0; i < number; i++)
        {
            // 生成实际的随机数
            a[i] = rand() % 100;
                    
            if (a[i] > max){
                max = a[i];
                best = i;//获取手气最佳
            }
            suma += a[i];
        }
    
        for (i = 0; i < number - 1; i++)
        {
            b[i] = a[i] / suma * total;//按照随机数计算每个人实际获得的金额
            sumb += round(b[i] * 100) / 100.0;//将红包金额保留两位小数
            //输出信息
            cout << "第" << setiosflags(ios::right)<< setw(3) << i + 1 << 
                "个人的红包是:" << setiosflags(ios::right) << setw(6) << 
                setiosflags(ios::fixed) << setprecision(2) << 
                round(b[i] * 100) / 100.0 ;
            if (best == i){
                cout << "(手气最佳)" << endl;
            }
            else {
                
                cout << endl;
            }
        }
        //最后一人的红包金额等于总金额减去前面的金额。
        cout << "第" << setiosflags(ios::right)<<
            setw(3) << number << "个人的红包是:" <<
            setiosflags(ios::right) << setw(6) << setiosflags(ios::fixed) <<
            setprecision(2) << round((total - sumb) * 100) / 100.0;
        if (best == number - 1){
            cout << "(手气最佳)" << endl;
        }
        else {
    
            cout << endl;
        }
        return 0;
    }

    结果:

    请输入红包金额:100
    请输入抢红包人数:10
      1个人的红包是:  0.38
      2个人的红包是:  3.06
      3个人的红包是: 11.66
      4个人的红包是:  4.40
      5个人的红包是: 17.02
      6个人的红包是: 14.53
      7个人的红包是:  6.12
      8个人的红包是: 13.19
      9个人的红包是: 11.85
     10个人的红包是: 17.79(手气最佳)
    请按任意键继续. . .
     
  • 相关阅读:
    Burnside引理与Polya定理 学习笔记
    Codeforces 438E. The Child and Binary Tree 多项式,FFT
    Berlekamp_Massey 算法 (BM算法) 学习笔记
    UOJ#335. 【清华集训2017】生成树计数 多项式,FFT,下降幂,分治
    UOJ#73. 【WC2015】未来程序 提交答案题
    UOJ#206. 【APIO2016】Gap 构造 交互题
    虚拟机配置JAVA_HOME
    创建虚拟机
    月份、季度、周
    maven多模块下使用JUnit进行单元测试
  • 原文地址:https://www.cnblogs.com/gkh-whu/p/11478522.html
Copyright © 2020-2023  润新知