0
点赞
收藏
分享

微信扫一扫

1090 组合数


Description
2n=C(n,0)+C(n,1)+…+C(n,n)。其中表示幂,C(n,x)表示组合数,即C(n,x)=n!/((n-x)!x!)。现在给你n(0<=n<=33),要你输出2^n的组合数之和的表达式

输入

每行一个整数n,如果n为负数则输入结束。

输出

每行输出一个表达式,表达式格式形似为2^n=C(n,0)+C(n,1)+…+C(n,n)。

Sample Input

2

3

-1

Sample Output

2^2=1+2+1

2^3=1+3+3+1

Sample Input

Sample Output

Source

ericxie

回想下高中的排序公式

1090 组合数_c语言

#include <stdio.h>
int main()
{
int n;//输入
while(scanf("%d",&n)&&n>=0)//n<0,循环结束
{
printf("2^%d=1",n);//先输出前面部分
int i=1,j,k;
__int64 c[35];//c数组的储存的数值很大,所以要用__int64
for(j=0;j<35;j++)//遍历赋值为1
{
c[j]=1;
}
while(i<=n/2)//因为输出结果前后是对称的。所以计算前面的就行,到时候两个for循环来输出,一个从前往后,一个从后往前
{
for(j=0,k=1;j<i,k<=i;j++,k++)//公式
{
c[i]=c[i]*(n-j)/k;
}
i++;
}
for(i=1;i<=n/2;i++)//输出前面部分的
{
printf("+%d",c[i]);
}
//判断是否以一个数来对称
if(n%2!=0)
{
for(i=n/2;i>=1;i--)
{
printf("+%d",c[i]);
}
}
else if(n%2==0)
{
for(i=n/2-1;i>=1;i--)
{
printf("+%d",c[i]);
}
}
if(n!=0)
{
printf("+1");
}
printf("\n");
}
return 0;
}

注意事项:数值类型用int就很容易溢出
写于2021年8月20日19:57分。


举报

相关推荐

0 条评论