農林漁牧網

您現在的位置是:首頁 > 農業

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

2023-01-25由 向陽花開滿山紅 發表于 農業

c++如何生成隨機數列表

隨著人工智慧、大資料等新一輪科技革命和產業變革的深入推進,

計算機科學基礎教育的人才選拔與培養逐漸受到重視。

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

01

學習計劃&目標

對於

零基礎且初中及以下階段(參加普及組)

的資訊學愛好者,如果

數學基礎還比較紮實

,可以嘗試這樣安排學習計劃:

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

第一階段:

掌握C++基礎語法

,包括:輸入輸出、條件分支、迴圈等內容;

第二階段:

掌握C++進階語法

,包括:陣列、字串、函式、遞迴、結構體、排序等內容;

第三階段:

初賽前,學習計算機基礎知識,簡單資料結構與演算法、簡單組合數學等,考前真題訓練。

目標

:爭取在普及組複賽中做出

1

道題。

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

進入本文的主題:

C++中,如何產生隨機數?

02

如何產生隨機數?

分三步驟,第1、2步為固定語法格式;第3步根據題目具體要求編寫表示式。

需要引入兩個標頭檔案:cstdlib、ctime;

在程式開頭處編寫固定格式(產生隨機種子):srand(time(NULL));這樣能夠保證程式每次執行時,隨機數都不同。

在需要產生隨機數的地方呼叫rand()函式,構造表示式即可。

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

資訊學奧賽課課通(C++)

¥

64。6

京東

購買

03

案例一:產生一個0-10之間的隨機數

rand()函式會產生一個隨機數,但並沒有確定範圍。如何獲取一個給定範圍的隨機數呢?

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

在這段程式碼中,只需要讓rand()函式取10的餘數,即可得到一個小於10之內的整數。注意:標頭檔案、產生隨機種子程式碼的編寫。

04

案例二:猜數字遊戲

產生一個1-50之間的隨機整數,只有5次猜測機會。解析:

1、在這個問題中,需要產生1-50之間的隨機數。可以考慮rand()函式去取50的餘數,但得到的只是0-49之間的數;如何得到想要的範圍?

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

注意觀察:只需要在前面程式碼的基礎上加個1即可,即:

rand()%50+1。

拓展,如果要產生25-50之間的隨機數,應該怎麼改寫上述程式碼呢?

請思考通用解決思路(文末給出答案)。

2、題目要求只有5次的猜測機會,需要考慮使用迴圈。C++中提供了while、do-while及for迴圈,可根據熟練度及喜好自行選用。建議選用for迴圈,因為這是具有明確次數的迴圈,使用比較方便簡潔。

參考程式碼如下:

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

上述程式碼中,在for迴圈中進行條件判斷,動態獲取使用者的猜測值guess變數,然後與隨機數num進行比較,根據比較結果提示相應的操作。

如果五次之內猜測正確,則“恭喜使用者”並順利結束程式;如果超過五次也沒有猜測出來,則提示“已經沒有機會了”。

05

案例三:猜拳遊戲

這個經典的案例在之前的教學文章、影片裡都有講過,分別用到了C、Java、Python等程式語言實現。本文就以C++的語法來實現其過程。

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

首先,我們必須有一個基本的思路。因為是和電腦出拳,所以可以這樣實現:

顯示介面(略)

使用者出拳(動態賦值)

電腦出拳(產生隨機數)

判斷勝負

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

顯示介面這塊由學習者按照個人喜好,自行設計遊戲介面,此處略寫。然後,看使用者出拳部分,採用C++中的

switch條件

結構可以實現,程式碼如下:

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

前面已經講了隨機數的產生方式,按照固定模式編寫程式碼即可。產生一個1-3之間的隨機數

rand()%3+1

,然後將數字轉換成文字輸出,同樣可以借用前面的switch結構,程式碼如下:

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

最後一步,就是根據使用者出拳的數字和電腦產生的隨機數進行比較,判斷勝負。這一步的程式碼就留個讀者自行完成了。(可參考作者其他教學資料)

06

總結

本文主要講解了在C++中如何產生隨機數。

1、如果只給出最大值,則:rand()%最大值;如:產生10以內的隨機數,rand()%10即可。

2、如果給出最小、最大值,則:rand()%(最大值-最小值)+最小值;如:產生10-30之間的隨機數,表示式就該這樣寫:rand()%(30-10)+10。

C++入門基礎系列:走進資訊學奧賽,如何產生隨機數?

今天的內容你都掌握了嗎?歡迎關注

想了解更多精彩內容,快來關注向陽花開滿山紅