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

以前有看到有人在寫「擲骰子100次,打印出擲骰子」的代碼html

便找空寫了一下代碼,不是很好,僅供你們討論數組

 

由於擲骰子的結果是在1~6之間隨機產生的,所以代碼也必需要模擬隨機的狀況函數

可是電腦是沒法真正的產生隨機數,只能以函數近似生成的方式獲得,所以個人代碼也是基於這種方式寫出的ui

 

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

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

而且因爲是函數生成,函數的特性決定了若是種子同樣,會獲得相同的結果,也就不存在隨機的狀況了unix

爲了不這種狀況,使用時間來做爲隨機數的種子,這裏使用了time()函數code

代碼以下:htm

#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循環中進行的blog

不然會形成不少次種子是同樣的,形成產生的值也同樣的後果

 

本文參考了以下文章:

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

相關文章
相關標籤/搜索