C++随机数

2020-12-13 16:32

阅读:435

标签:color   png   lib   pre   怎么办   idt   出现   随机数   现在   

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

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

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

  看下面一段代码:

  

 1 #include  2 #include 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,如果我们不去改变它,那么生成的伪随机数都是一样的。

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

 1 #include  2 #include 3 #include 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  2 #include 3 #include 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(num1num2)
14     {
15         num1 = num1 + num2;
16         num2 = num1 - num2;
17         num1 = num1 - num2;
18     }//如果num1小,交换num1和num2
19     
20     cout "What‘s " " - " "? "  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! " " - " " should be " "! "  endl;
32     }
33     return 0;
34 }

  两次运行结果如下:

  技术图片

   技术图片

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

 1 #include  2 #include 3 #include 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 }

 

   

C++随机数

标签:color   png   lib   pre   怎么办   idt   出现   随机数   现在   

原文地址:https://www.cnblogs.com/bwjblogs/p/11620767.html


评论


亲,登录后才可以留言!