目录
解题思路:
先定义一个十行十列的数组,第一列和对角线上的赋值为1,中间的数按照杨辉三角每个数都是上一行前一列和本列两个数之和的规律赋值。注意到每一行的数字个数都与行数相等,最后通过双循环输出。
编写程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i, j;
int a[10][10] = { 0 };//先全部初始化为0
for (i = 0; i < 10; i++)
{
a[i][0] = 1;//每行第一列都为0
for (j = 0; j <10; j++)
{
if (i == j)//对角线上的数都为0
{
a[i][j] = 1;
}
if (i > 1 && j > 0)//杨辉三角的性质
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
}
for (i = 0; i < 10; i++)//输出行
{
for (j = 0; j < i + 1; j++)//因为每行数字个数与行数相等
printf("%-4d", a[i][j]);
putchar('\n');//每行末尾打个回车
}
return 0;
}
优化:
还可以边赋值边输出,少一个循环
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i, j;
int a[10][10] = { 0 };
for (i = 0; i < 10; i++)
{
a[i][0] = 1;
for (j = 0; j <i+1; j++)
{
if (i == j)
{
a[i][j] = 1;
}
if (i > 1 && j > 0)
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
printf("%-4d", a[i][j]);
}
putchar('\n');
}
return 0;
}