回覆列表
  • 1 # 二師兄programmer

    說明:由於計算機產生的是偽隨機數,所以重複的機率比較高。

    思路:1年365天,用1到365表示。50個同學的生日用陣列儲存,隨機產生一個1-365之間的數字作為生日然後對陣列進行相似判斷,一旦有2個同學生日相同就返回1.然後計數器加1.最後處以總模擬的次數。

    程式碼:

    #include "stdio.h"

    #include "conio.h"

    #include <time.h>

    #include <math.h>

    #include<stdlib.h>

    void randomBirthday(int a[], int n)

    {

    int i;

    time_t t;

    srand((unsigned)time(&t));

    for (i = 0; i<n; i++)

    {

    a[i] = (rand() % 365) + 1;

    }

    }

    int isSameWithTwo(int a[], int n)

    {

    int temp = -1;

    int i, j;

    for (i = 0; i<n - 1; i++)

    {

    temp = a[i];

    for (j = i + 1; j<n; j++)

    {

    if (temp == a[j])

    {

    return 1;

    }

    }

    }

    return 0;

    }

    void main()

    {

    int birthday[50];

    int i, same = 0;

    for (i = 0; i<100000; i++)

    {

    randomBirthday(birthday, 50);

    if (isSameWithTwo(birthday, 50) == 1)

    {

    same++;

    }

    }

    printf("100000次測試,有%d 次出現相同的,相同的機率是:%lf", same, same*1.0 / 100000);

    getchar();

    }

    效果:100000次測試,有100000 次出現相同的,相同的機率是:1.000000

    【說明】隨機數是偽隨機數,而且模擬了10w次,這個機率是無限次接近1的。

    我測試了下,基本每一次都有2個生日是統一天的。

    所以機率是1. 理論上是97%,大三組合數學上有證明的。

    執行結果:

    我現在已經畢業將近兩年了,從大學開始學程式設計,期間學習了C需要程式設計,C++需要程式設計,Win32程式設計,MFC程式設計,畢業之後進入一家影象處理相關領域的公司,掌握了用OpenCV對影象進行處理,如果大家對相關領域感興趣的話,可以關注我,我這邊會為大家進行解答哦!我這邊還有c、c++、Win32、MFC程式設計相關資料哦,有興趣的朋友可以關注我,找我要哦!免費噠!

  • 中秋節和大豐收的關聯?
  • 賣油翁裡的一詞多義,通假字,古今異義?