第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;
}本回答被提问者采纳