杨辉三角,该怎么处理

杨辉三角
#include "stdafx.h"

# include <stdio.h>

int main(void)
{
 static int i, j,k, a[10][10];
 a[0][0] =1 ;
 for(k=0;k<10;k++)
{ for(i=k;i<=k;i++)
{ for(j=1;j<=k;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
 for(i=0;i<10;i++)
{for(j=0;j<=i;j++)
{ printf("%-5d",a[i][j]);}
 printf("\n");
}
 }
运行结果
1
0 1 
0 2 1
0 3 3 1
0 4 6 4 1
0 5 10 10 5 1
..........

为什么从第2行开始会出现0???















------解决方案--------------------
?我们当时做的时候就是要有0呀,把0进栈的呀
------解决方案--------------------
C/C++ code

#include <stdio.h>
int main(void)
{
    int i, j,k, a[10][10];
    a[0][0]=1;
    for(k=1;k<10;k++)
    { 
        a[k][0]=a[k-1][0];
        for(i=1;i<k;i++)
            a[k][i]=a[k-1][i-1]+a[k-1][i];
        a[k][k]=a[k-1][k-1];
    }
    for(i=0;i<10;i++)
    {
        for(j=0;j<=i;j++)
            printf("%-5d",a[i][j]);
        printf("\n");
    }
    system("pause");
}

------解决方案--------------------
你的我没看懂
这是百度的
C/C++ code

#include<stdio.h>
#define M 10
void main()
{
    int a[M][M],i,j;
    for(i=0;i<M;i++)
        for(j=0;j<=i;j++)
        {
            if(i==j||j==0)
                a[i][j]=1;
            else
                a[i][j]=a[i-1][j]+a[i-1][j-1];
            printf("%d  ",a[i][j]);
            if(i==j)
                printf("\n");
        }
}

------解决方案--------------------
因为你的内层循环j是从1开始的啊,也就是从第2列开始的呀,第一列你没管
由于是你的数组是static int型,所有元素初始化为0

------解决方案--------------------
另一种版本:
C/C++ code

#include <stdio.h>

int factorial(int k)
{
    int f = 1;

    if(k == 0)    return 1;

    for(int i = 1; i <= k; ++i)
    {
        f *= i;
    }
    return f;
}

int combination(int n, int m)
{
    return factorial(n) / (factorial(m) * factorial(n - m));
}

int main(int argc, char* argv[])
{
    int row = 10;
    for(int i = 0; i < row; ++i)
    {
        for(int j = 0; j <= i; ++j)
        {
            printf("%d\t", combination(i, j));
        }
        printf("\n");
    }
    return 0;
}