/*********************************************************************************************************************************
*打印杨辉三角
***********************************************************************************************************************************/
#include <stdio.h>
#define N 7
void main(){
//使用N*N的数组实现
int data[N][N];
int i, j, k;
int num[N];//使用一维数组的情况
int temp[N];
data[0][0] = 1;
data[1][0] = data[1][1] = 1;
for(i = 1; i < N; i++){
for(j = 0; j < i+ 1; j++){
if(j == 0 || j == i){
data[i][j] = 1;
}else {
data[i][j] = data[i - 1][j - 1] + data[i-1][j];
}
}
}
printf("使用N*N的数组实现:\n");
/**打印出杨辉三角**/
for(i = 0; i < N; i++){
for(k = 0; k < N - i -1; k++){
printf(" ");//打印3个空格
}
for(j = 0; j < i+1; j++){
printf("%6d", data[i][j]);
}
printf("\n");
}
/**********************************************************************/
//使用两个含有N个元素的一维数组实现
printf("*********************************************************");
printf("\n使用两个含有N个元素的一维数组实现 :\n");
for(i = 0; i < N; i++){
if(i == 0) {
for(k = 0; k < N - i -1; k++){
printf(" ");//打印3个空格
}
printf("%6d\n", 1);}
else if(i == 1){
for(k = 0; k < N - i -1; k++){
printf(" ");//打印3个空格
}
printf("%6d%6d\n", 1, 1);
num[0] = 1;
num[1] = 1;
}else{
for(j = 0; j < i+1; j++){
if(j == 0|| j == i){//开头或者结尾的数字
if(j == 0){
for(k = 0; k < N - i -1; k++){
printf(" ");//打印3个空格
}
}
printf("%6d", 1);
temp[j] = 1;
}else{//不是开头或结尾的数字
temp[j] = num[j-1] + num[j];//temp暂时存储当前打印行的数据
printf("%6d", temp[j]);
}
}
printf("\n");
for(k = 0; k < j; k++){//将temp数组中的数据传递给num数组,使其保持存储打印行的上一行数据
num[k] = temp[k];
}
}
}
getchar();
}