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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM