1090 组合数

组合数

1、题目内容

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

2、题目分析

这个题主要就是需要我们会计算组合数,在高中的时候我们学过一个定理C(n,x)=C(n-1,x)+C(n-1,x-1),使用这个定理我们可以通过二维数组来实现,从而得到各个组合数的值。当然使用其它方法也是可以的,比如直接使用求阶乘进行相除的方法也可以。

3、参考代码

#include<stdio.h>
int main()
{
	int num[34][34]; //用来计算组合数的数组 
	int i,n,j;
	for(i=1;i<34;i++)//数组初始化 
	{
		num[i][i]=1;
		num[i][0]=1;
		num[i][1]=i;
	}
	while(scanf("%d",&n)!=EOF&&n>=0)
	{
	    for(i=2;i<=n;i++) //计算各个组合数的值 
	    {
	    	for(j=1;j<i;j++)
	    	{
	    		num[i][j]=num[i-1][j]+num[i-1][j-1];
	    	}
	    }
	    //进行输出,注意好格式 
	    printf("2^%d=1",n);
	    for(i=1;i<=n;i++)
	    {
	    	printf("+%d",num[n][i]);
	    }
	    printf("\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42987451/article/details/83277348