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
有什么想法可以提高效率吗?我可以研究哪些技术?第四,如何使这个过程更合乎逻辑且更短?特别是我可以看到循环,或者 else if,我可以压缩这些参数吗?
这是一道比较简单的概率题。无需编程。要计算至少有两名学生选出同一位总统的几率,如果您计算没有学生选出同一位总统的几率,然后取其倒数,就更容易了。
按顺序考虑学生:
- 学生 #1 可以选择 16 位总统中的任何一位,而不必担心重叠。选择一位独特总统的机会 = 16/16.
- 学生 #2 有 15/16 的机会选出一位独特的总统。
- 学生 #3 有 14/16 的机会。
- 学生 #4 有 13/16 的机会。
- 学生 #5 有 12/16 的机会。
由于这些是独立的选择,您可以将它们相乘以获得每个人选出一位独特总统的总体机会。
16/16 * 15/16 * 14/16 * 13/16 * 12/16
= 4095/8192
≈ 49.98%
但是请记住,我们正在寻找与此相反的结果。答案是:
1 - 4095/8192
= 4097/8192
≈ 50.01%
我正在尝试获得一些飞云技术,并且正在研究这些类型的问题。
从 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
有什么想法可以提高效率吗?我可以研究哪些技术?第四,如何使这个过程更合乎逻辑且更短?特别是我可以看到循环,或者 else if,我可以压缩这些参数吗?
这是一道比较简单的概率题。无需编程。要计算至少有两名学生选出同一位总统的几率,如果您计算没有学生选出同一位总统的几率,然后取其倒数,就更容易了。
按顺序考虑学生:
- 学生 #1 可以选择 16 位总统中的任何一位,而不必担心重叠。选择一位独特总统的机会 = 16/16.
- 学生 #2 有 15/16 的机会选出一位独特的总统。
- 学生 #3 有 14/16 的机会。
- 学生 #4 有 13/16 的机会。
- 学生 #5 有 12/16 的机会。
由于这些是独立的选择,您可以将它们相乘以获得每个人选出一位独特总统的总体机会。
16/16 * 15/16 * 14/16 * 13/16 * 12/16
= 4095/8192
≈ 49.98%
但是请记住,我们正在寻找与此相反的结果。答案是:
1 - 4095/8192
= 4097/8192
≈ 50.01%