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;
}