在所有10位二进制数中,数字0和1的数量相同的数占总数的百分比步骤

如题所述

第1个回答  推荐于2016-12-02
/*
思路:
n 位二进制数一共有 2^n 个。

n 位二进制数(n 为偶数),0 和 1 个数相等。
首先,最高位必须为 1,剩下 n-1 位里面有:
n/2 个 0 ;
n/2 - 1 个 1 .
这 n-1 个数可以任意排列,一共有 中排列方法。

最后的结果为: C(n-1,n/2) / 2^n
*/
#include <stdio.h>
int C(int n,int m)
{
int i,r=1;
m = (m > n-m) ? n-m : m;

for(i=n-m+1;i<=n;i++)
r*=i;
for(i=1;i<=m;i++)
r/=i;

return r;

}
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main(int argc, char *argv[])
{
// 二进制位数
int digits=10,equal,total;
if(digits %2 == 0)
{
total = (2<<(digits-1));
equal = C(digits-1,digits/2);
printf("%d : %d\n",equal/gcd(equal,total),total/gcd(equal,total));
}
else
{
printf("0 : %d\n",2<<(digits-1));
}
return 0;
}本回答被提问者采纳
第2个回答  2012-10-20
50%