簡體   English   中英

C中的基本枚舉效率

[英]Basic Enumeration Efficiency in C

我正在嘗試獲得一些飛雲技術,並且正在研究這些類型的問題。

1774年至1788年,美國大陸會議有16位主席。在美國歷史研討會上,五位學生中的每一位都從其中一位進行報告。 如果所有總統均等地被選出,則計算至少兩個學生選擇同一位總統的概率。

#include <stdio.h>
int main() 
{
int tot=0, probc=0, a=1, b=1, c=1, d=1, e=1, cnt=16;

while(e<=cnt)
{
   while(d<=cnt)
    {
        while(c<=cnt)
        {
            while(b<=cnt)
            {
                while(a<=cnt)
                {
                    if(a==b){++probc;}
                    else if(a==c){++probc;}
                    else if(a==d){++probc;}
                    else if(a==e){++probc;}
                    else if(b==c){++probc;}
                    else if(b==d){++probc;}
                    else if(b==e){++probc;}
                    else if(c==d){++probc;}
                    else if(c==e){++probc;}
                    else if(d==e){++probc;}
                    ++a;++tot;
                }
                a=1;++b;
            }
            b=1; ++c;
        }
        c=1; ++d;
    }
    d=1;++e;
}
printf("%d / %d", probc,tot);
return 0;
}
output:
524416 / 1048576

關於什么將是更有效的想法,以及我可以使用的技術等等,使它變得更合乎邏輯且不那么冗長? 具體來說,我可以看到這些循環,如果可以,我可以看到這些參數嗎?

這是一個相對簡單的概率問題。 無需編程。 要計算至少兩個學生選出同一位校長的機會,如果您計算出沒有學生選出同一位校長的機會,然后取其倒數,則會更容易。

按順序考慮學生:

  1. 學生#1可以選擇16位校長中的任何一位,而不必擔心重疊。 選出一位獨特的總裁的機會= 16/16。
  2. 2號學生有15/16的機會選擇一位獨特的校長。
  3. 3號學生有14/16的機會。
  4. #4學生有13/16的幾率。
  5. #5學生有12/16的幾率。

由於這些都是獨立的選擇,因此您可以將它們相乘,以獲得每個人選出一位唯一總裁的總體機會。

16/16 * 15/16 * 14/16 * 13/16 * 12/16
= 4095/8192
≈49.98%

但是請記住,我們正在尋找相反的東西。 答案是:

1-4095/8192
= 4097/8192
≈50.01%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM