描述:
打印杨辉三角
输入描述:
第一行包含一个整数数n。 (1≤n≤30)
输出描述:
包含n行,为杨辉三角的前n行。
例如:
输入:6
输出:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
思路:
很多同学写了2层for循环后,就没然后了。主要是最外层如何打印出1的难度较大。解决了最外层的1之后,内层的数字就可以通过杨辉三角的性质来求出来。
我们还是要利用二维数组,通过找规律来解决。
我们从第0行开始。第0行的1对应的i = 0,j = 0; 第1行的1分别对应的i = 1,j = 0;i = 1, j = 1; 第2行的1分别对应的是i = 2, j = 0; i = 2, j = 2; 这样下去, 我们发现当 i == j 的时候就打印1,还有, 不管i 如何变化,当 j = 0 时也会打印出1,所以
if((i == j) || j == 0)
{
arr[i][j] = 1;
printf("%d ", arr[i][j]);
}
解决了外层的1之后,里面的数字就很好解决。如arr[2][1] (也就是数字2) = arr[1][0] + arr[1][1],还是找规律,发现:
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
那么完整代码如下:
#include<stdio.h>
int main(void)
{
int n = 0;
int i = 0, j = 0;
int arr[30][30] = { 0 };
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j <= i; j++)
{
if(j == 0 || j == i)
{
arr[i][j] = 1;
printf("%d", arr[i][j]);
}
else
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
printf("%d", arr[i][j]);
}
}
printf("\n");
}
return 0;
}
有的同学可能在某些题目上尝到了一维数组的甜头,想用一维数组来解决这个题。不过,勇气可嘉(0-0)!