考虑到用二维数组存储杨辉三角中的各行的值,会有大量的空间被浪费,故考虑用一维数组来实现
/*关键:每一行的行数就是该行的元素个数;每一行的元素总和他们是成等差数列的,如1,2,3,4...;用右脑思维,然后用左脑表达*/
#include <stdio.h>
#define n 7
int main(void){
int yanghui[(n*n + n)/2];
yanghui[0] = yanghui[1] = yanghui[2] = 1;
int i, j;
//对每一行进行操作
for(i = 3; i <= n; i++){
//首尾赋值
yanghui[((i-1)*(i-1) + i-1)/2] = yanghui[((i-1)*(i-1) + i-1)/2 + i-1] = 1;
//每一行中中间几个元素进行赋值
for(j = 1; j <= i - 2; j++){
yanghui[((i-1)*(i-1) + i-1)/2 + j] = yanghui[((i-2)*(i-2) + i-2)/2 + j-1] + yanghui[((i-2)*(i-2) + i-2)/2 + j];
}
}
//输出杨辉三角,可能插在语句中更容易实现输出,但是不符合结构化原则
for(i = 1; i <= n; i++){
//控制前面的空格
for(j = n - i; j > 0; j--){
printf(" ");
}
for(j = 1; j <= i; j++){
printf("%d ", yanghui[((i-1)*(i-1) + i)/2 + j-1]);
}
printf("\n");
}
浙公网安备 33010602011771号