zoukankan      html  css  js  c++  java
  • C++随机数

    假如我们要给小朋友出100以内减法题,而且我们希望每次运行的减法都不一样(不能永远是9-2=?),那么我们该怎么办呢?

    这里我们需要用到随机数,每次出的题中,减数与被减数是两个随机数,这样就可以避免只做一道题。

    随机数要用头文件<cstdlib>中的rand()函数来生成,生成的随机数在0~RAND_MAX之间,RAND_MAX是由平台决定的。

    看下面一段代码: 

     1 #include <iostream>
     2 #include<cstdlib>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int rad=rand();
     9     cout << rad;
    10     return 0;
    11 }

    我运行的结果是41(不同机器运行结果不同)。我们再尝试着运行一次,会发现出现的结果还是41(和上次一样),这是因为rand()函数生成的是伪随机数。

    rand()算法中有一个叫做种子(seed)的值,它的默认值为1,如果我们不去改变它,那么生成的伪随机数都是一样的。

    为了使得种子在每一次运行时都不同,我们需要用到<ctime>头文件中的time(0)函数,该函数返回自格林尼治时间(1970年1月1日00:00:00)到现在的秒数,因为运行的时间一定是不同的,所以seed也是不同的,这样的rand()才是真正的随机数。代码如下:

     1 #include <iostream>
     2 #include<cstdlib>
     3 #include<ctime>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     srand(time(0));//修改seed
    10     int rad=rand();
    11     cout << rad;
    12     return 0;
    13 }

    回到最开始的问题,现在我们要有两个小于100的随机数,并且num1大于num2,之后通过if分支语句判断答案的正确性:

     1 #include <iostream>
     2 #include<cstdlib>
     3 #include<ctime>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     srand(time(0));//改变种子的值
    10     int num1=rand()%100;
    11     int num2=rand()%100;
    12     //生成两个100以内的随机数
    13     if(num1<num2)
    14     {
    15         num1 = num1 + num2;
    16         num2 = num1 - num2;
    17         num1 = num1 - num2;
    18     }//如果num1小,交换num1和num2
    19     
    20     cout << "What's " << num1 << " - " << num2 << "? " << endl;
    21 
    22     int answer = 0;
    23     cin >> answer;
    24 
    25     if(num1-num2==answer)
    26     {
    27         cout << "Great! You are right! " << endl;
    28     }
    29     else
    30     {
    31         cout << "Sorry! You are wrong! " << endl << num1 << " - " << num2 << " should be " << num1-num2 << "! " << endl;
    32     }
    33     return 0;
    34 }

    两次运行结果如下:

    如果要表示20~29的随机数怎么办?

     1 #include <iostream>
     2 #include<cstdlib>
     3 #include<ctime>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     srand(time(0));//改变种子的值
    10     int num=20+rand()%10;
    11     //先生成0~9的随机数,再加20,就可以表示20~~29的随机数了
    12 
    13     cout << num;
    14     return 0;
    15 }
  • 相关阅读:
    Eclipse SVN 安装注意事项
    Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量
    Linux下各种常见环境变量的配置
    Linux下用dump实现备份和还原 ux下用dump实现备份和还原
    Linux dd——备份命令
    linux cpio 备份命令
    Linux服务器的常用备份方法
    tar备份系统
    tar备份系统的方法
    LINUX系统备份
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/11620767.html
Copyright © 2011-2022 走看看