目标:在屏幕上打印杨辉三角。
杨辉三角概念规律如下:
前提:每行端点与结尾的数为1.
-
每个数等于它上方两数之和。
-
每行数字左右对称,由1开始逐渐变大。
-
第n行的数字有n项。
关于杨辉三角的数学概念还有很多,具体可自行百度。。
杨辉三角如下:
1
1 1
1 2 1
1 3 3 1
……
我们用row表示行, 用col表示列
用C语言表示他的规律为: arr[row][col] = arr[row - 1][col] + arr[row - 1][col - 1]
途径一:用二维数组实现int main()
{
int n = 0;
int arr[50][50] = {0};
printf("请输入杨辉三角行数:n");
scanf("%d", &n);
arr[0][0] = 1;
printf("%dn", arr[0][0]);
for (int row = 1; row < n; row++)
{
arr[row][0] = 1;
for (int col = 1; col <= row; col++)
{
arr[row][col] = arr[row - 1][col] + arr[row - 1][col - 1];
}
for (int col = 0; col <=row; col++)
{
printf("%d ", arr[row][col]);
}
printf("n");
}
system("pause");
return 0;
}
首先对第一行, 也就是 arr[]0[0] 赋值 1
外层for循环,从第二行开始,首先将每一行的第一列赋值为1
内层第一个for循环,用规律实现了一行中所有的列的数字的获得
之后内层第二个for循环,实现了这一行的打印
如次继续外层循环,直至打印n行,实现结果
途径二:用一维数组实现int main()
{
int n = 0;
int arr[50] = {1};
printf("请输入杨辉三角行数:n");
scanf("%d", &n);
printf("1n");
for (int row = 1; row < n; row++)
{
for (int col = row; col > 0; col--)
{
arr[col] = arr[col] + arr[col - 1];
}
for (int col = 0; col <= row; col++)
{
printf("%d ", arr[col]);
}
printf("n");
}
system("pause");
return 0;
}
用一维数组实现思想,是每次保留上一行的数据,在上一行的数字上进行修改得到本行结果,提高了效率。
我们知道,第i行, 有 i 列数据
我们首先直接打印出 1作为第一行,从第二行开始,第一个for循环控制行数
内层第一个for循环,得到这一行每一列的数据
比如
我们知道第一行只有1个1 ,那么arr[0] = 1
第二行arr【1】 = arr[1] + arr[0] = 1
打印本行得到结果 1 1 以此类推



