有人在思考怎样才能实现杨辉三角的时候就已经是头皮发麻了,这样一个图形要怎么才能完美呈现出来呢?
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
首先看到它不要慌,冷静地观察杨辉三角的规律,我们会发现只要不是1的位置,其余的数字都是上面两个相邻的数字相加而得到的;
明白这个规律之后我们在来简化一下杨辉三角,使我们实现代码更容易一些
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
我们先不管空格来实现代码,最后在加上空格就可以了;
在实现代码的时候,我们要清楚地明白,实现杨辉三角要使用到二维数组;再仔细观察会发现每一行的第一个元素和最后一个都是1,但其实最后一个并非是每一行的最后一个,而是显示出来的最后一个,这个千万不要混淆了;那我们会发现当行数和列数相等的元素的值为1,那就可以初步实现代码
for(i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (j == 0 || i == j)
arr[i][j] = 1;
每一行的第一个元素为1,那么就是说当列数为0的那一列都是1;
接下来,就是实现非零的赋值
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
这样就实现了一个简化版的杨辉三角
第二步就是把空格加上去
for (k = 0; k < 10 - i; k++)
{
printf(" ");
}
这样,一个杨辉三角的实现代码就完成了,由于被目前所学的知识限制,不能够灵活的选择要输入几行的杨辉三角。
下面是具体的代码实现,仅供参考
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[10][10] = { 0 };
int i = 0;
int j = 0;
for(i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (j == 0 || i == j)
arr[i][j] = 1;
else
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
int k = 0;
for (i = 0; i < 10; i++)
{
for (k = 0; k < 10 - i; k++)
{
printf(" ");
}
for (j = 0; j <= i; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}