问题:打印前10行的杨辉三角
运行结果如下
方法一:
思路:
1.每一行的第一列均为1
2.对角线上的数字也均为1
3.除了每一行第一列和对角线上的数字外,其余数字均等于其上一行同列数字与上一行前一列数字之和(a[i][j] = a[i - 1][j - 1] + a[i - 1][j])
参考代码如下
#include<stdio.h>
#include<stdlib.h>
int main ()
{
int i, j, a[11][11];
for ( i = 1; i < 11; i++)
{
a[i][i] = 1;
a[i][1] = 1;
}
for (i = 3; i < 11; i++)
for (j = 2; j <= i-1; j++)
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
for (i = 1; i < 11; i++)
{
for (j = 1; j <= i; j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}
方法二:
思路:
1.把第一行当做特殊值,单独考虑
2.其余的每行第一列和最后一列都是1
3.中间的数字等于其上一行同列数字与上一行前一列数字之和(a[i][j] = a[i - 1][j - 1] + a[i - 1][j])
参考代码如下
#include<stdio.h> //总而言之,不同的算法带给了我们不同的思路,但结果最终达到就行,平时多拓宽视野,多积累
#include<stdlib.h>
int main()
{
int a[10][10]={0},i,j;
a[0][0]=1;
printf("%d\n",a[0][0]);;
for(i=1;i<=9;i++)
{
a[i][0]=1;
printf("%d ",a[i][0]);
if(i>1)
{
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%d ",a[i][j]);
}
}
a[i][i]=1;
printf("%d",a[i][i]);
printf("\n");
}
return 0;
}