题目内容:
在屏幕上打印杨辉三角。
思路:
首先我们通过观察发现,每一步的打印都与行列数有关,中间的数据由这一列和上一行的前一列数据控制。所以我们可以使用二维数组进行操作:
(1)每一行的首元素都是1,第i行的第i个元素也是1:
int main()
{int arr[10][10] = { 0 };for (int i = 0; i < 10; i++){arr[i][0] = 1;for (int j = 0; j <= i;j++){if (i == j){arr[i][j] = 1;}}}for (int i = 0; i < 10; i++){for (int j = 0; j <=i; j++){printf("%d", arr[i][j]);}printf("\n");}return 0;
}
第一步就完成了。
(2)接下来要对中间的元素的值的规律观察,我们发现中间的数据由这一列和上一行的前一列数相加得出,比如3=1+2;2=1+1;...:
#include<stdio.h>int main()
{int arr[10][10] = { 0 };for (int i = 0; i < 10; i++){arr[i][0] = 1;for (int j = 0; j <= i;j++){if (i == j){arr[i][j] = 1;}if (i > 1 && j > 0){arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];}}}for (int i = 0; i < 10; i++){for (int j = 0; j <=i; j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;
}
(3)打印空格:
for (j = 10 - i; j > 0; j--)
{printf(" ");
}
(4)最后代码如下:
#include<stdio.h>int main()
{int arr[10][10] = { 0 };int i = 0;int j = 0;for (int i = 0; i < 10; i++){for (j = 10 - i; j > 0; j--){printf(" ");}arr[i][0] = 1;for (int j = 0; j <= i;j++){if (i == j){arr[i][j] = 1;}if (i > 1 && j > 0){arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];}printf("%-3d ", arr[i][j]);}printf("\n");}return 0;
}
谢谢大家!!!