XTU OJ 1090 组合数

Description

2^n=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

思路分析:将杨辉三角进行打表就行了,注意一下边界问题,不要越界 

#include<stdio.h>
int main()
{
	int dp[40][40]={0},i,j,n;
	dp[0][0] = 1;//第一行是0,为
	//第二行下标为1,c1,0   c1,1//
	//dp[1]是第二行,但是c1,0  c1,1
	for(i=1;i<=33;i++)//杨辉三角 
	{
	   dp[i][0]=1;
		dp[i][i]=1;
		for(j=1;j<=i;j++)
		{
			dp[i][j]=dp[i-1][j]+dp[i-1][j-1]; 
		}
	}
	while(scanf("%d",&n)&&n>=0)
	{
		//输入为n实际上第n+1行,下标为n,说明是
		printf("2^%d=1",n);//为了输出后面的+号就先输出1
		for(j=1;j<=n;j++)
		{
			printf("+%d",dp[n][j]); //跳过第一个数进行输出
		}
	 printf("\n");
	}
	return 0;	
} 

猜你喜欢

转载自blog.csdn.net/qq_24917263/article/details/127602472