#include
#include
int s[10000][10000];
int main()
{
int n,i,j;
scanf("%d",&n);
s[1][1]=1;
s[2][1]=1;
s[2][2]=1;
if(n==1)
printf("%d\n",s[1][1]);
else if(n==2)
{
printf("%d\n",s[1][1]);
printf("%d %d\n",s[2][1],s[2][2]);
}
else
{
for(i=3;i<=n;i++)
{
for(j=1;j<=i;j++)
{
s[i][j]=s[i-1][j]+s[i-1][j-1];
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
printf("%d ",s[i][j]);
}
printf("\n");
}
}
system("pause");
return 0;
}
我的意思是把n=1和n=2特殊处理,其他的就可以算出来了,先用一个二维数组存着,再一起输出,这样你看行吗
#include
//我的版本
int c(int m,int n);
main()
{
int i,j,n;
scanf("%d",&n);
for(i=0;i<=n;i++)
{
for(j=0;j<=i;j++)
printf("%5d",c(i,j));
printf("\n");
}
}
int c(int m,int n)
{
int i,j,p=1,s=1;
for(i=m,j=0;jp*=i;
for(i=n,j=0;js*=i;
return p/s;
}
根据笛卡尔组合数的杨辉三角
#define M 20
#define N 20
#include
main()
{
int i,j,n;
int a[M][N];
scanf("%d",&n);
for(i=0;ifor(j=0;j<=i;j++)
{
if(i==j||i==0||j==0)
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
for(i=0;i{
for(j=0;j<=i;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
二维数组版