题目内容:
在屏幕上打印杨辉三角。
思路:
首先我们通过观察发现,每一步的打印都与行列数有关,中间的数据由这一列和上一行的前一列数据控制。所以我们可以使用二维数组进行操作:
(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;
}
谢谢大家!!!