题目:
题目分析:定义一个二维数组yh[10][10](yh[行][列])
//不难发现在二维数组yh[0][0]--yh[9][9]中
//(1) yh[i][0]第i行(每一行)的第0个(第一个)都是1 (i:0~n-1)
//(2) yh[i][i]第i行(每一行)的第i个(最后一个)都是1 (i:0~n-1)
//(3) yh[i][j]=yh[i-1][j]+yh[i-1][j-1] (i:1~n-1 j:1~n-1) #意为每一个数等于这个数肩膀上两个数的和。
代码如下:
#include<stdio.h>
int main()
{
int yh[10][10],i,j;
for(i=0;i<10;i++)
{
yh[i][0]=1;
yh[i][i]=1;
}
for(i=1;i<10;i++)
{
for(j=1;j<i;j++)
{
yh[i][j]=yh[i-1][j]+yh[i-1][j-1];
}
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",yh[i][j]);
}
printf("\n");
}
return 0;
}
输出结果:
代码推广到指定输出行数:
#include<stdio.h>
int main()
{
int i,j,n;
scanf("%d",&n);
int yh[n][n];
for(i=0;i<n;i++)
{
yh[i][0]=1;
yh[i][i]=1;
}
for(i=1;i<n;i++)
{
for(j=1;j<i;j++)
{
yh[i][j]=yh[i-1][j]+yh[i-1][j-1];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",yh[i][j]);
}
printf("\n");
}
return 0;
}
输出结果:
注意:不可以这样写for循环语句,以下是i和j同时变化,这样只能输出yh[0][0] yh[1][1] yh[2][2]....即每行的最后一个数,不能遍历整个二维数组。
for(i=0,j=0;i<n&&j<n;i++,j++)
{
printf("%d ",yh[i][j]);
printf("\n");
}
结果如下: