[英]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
關於什么將是更有效的想法,以及我可以使用的技術等等,使它變得更合乎邏輯且不那么冗長? 具體來說,我可以看到這些循環,如果可以,我可以看到這些參數嗎?
這是一個相對簡單的概率問題。 無需編程。 要計算至少兩個學生選出同一位校長的機會,如果您計算出沒有學生選出同一位校長的機會,然后取其倒數,則會更容易。
按順序考慮學生:
由於這些都是獨立的選擇,因此您可以將它們相乘,以獲得每個人選出一位唯一總裁的總體機會。
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.