擲骰子問題之C語言隨機數


之前有看到有人在寫“擲骰子100次,打印出擲骰子”的代碼

便找空寫了一下代碼,不是很好,僅供大家討論

 

因為擲骰子的結果是在1~6之間隨機產生的,因此代碼也必須要模擬隨機的情況

但是電腦是無法真正的產生隨機數,只能以函數近似生成的方式得到,因此我的代碼也是基於這種方式寫出的

 

得到隨機數的方式有兩步,第一步是設置產生隨機數的種子,第二步才是根據種子得到隨機數

這兩步分別對應了兩個函數:srand()和rand()

並且由於是函數生成,函數的特性決定了如果種子一樣,會得到相同的結果,也就不存在隨機的情況了

為了避免這種情況,使用時間來作為隨機數的種子,這里使用了time()函數

代碼如下:

#include <stdio.h>
#include <stdlib.h>  // 使用了srand和rand函數
#include <time.h>  // 使用了time函數

int main()
{
    // 按時間設置生成隨機數的種子
    srand((unsigned)time(NULL));
    // 設置一個長度為6的int數組,存放擲色子的結果
    int numbers[6] = {0, 0, 0, 0, 0, 0};
    // 循環擲色子100次
    for (int i = 0 ; i < 100; i++) {
        // 生成隨機結果,控制在1~6之間
        int num = rand() % 6 + 1;
        // 根據結果進行對應統計
        switch (num) {
            case 1:  // 骰子結果為1時的計數
                numbers[0]++;
                break;
            case 2:  // 骰子結果為2時的計數
                numbers[1]++;
                break;
            case 3:  // 骰子結果為3時的計數
                numbers[2]++;
                break;
            case 4:  // 骰子結果為4時的計數
                numbers[3]++;
                break;
            case 5:  // 骰子結果為5時的計數
                numbers[4]++;
                break;
            case 6:  // 骰子結果為6時的計數
                numbers[5]++;
            default:
                break;
        }
    }
    // 擲色子完成后遍歷數組輸出結果
    for (int j = 0; j < 6; j++) {
        // 輸出結果
        printf("%d", numbers[j]);
        if (j < 5) {
            printf(" - ");
        }
        else
        {
            printf("\n");
        }
    }
    
    return 0;
}

需要注意的是,由於計算機的運行速度非常快,因此設置種子是不能在for循環中進行的

否則會造成很多次種子是一樣的,造成產生的值也一樣的后果

 

本文參考了如下文章:

http://blog.chinaunix.net/uid-25513153-id-200003.html


免責聲明!

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



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