1、最标准的杨辉三角
/*
编写程序打印杨辉三角形
1 变形 1 0 0 0
1 1 1 1 0 0
1 2 1 1 2 1 0
。。。。。。 1 3 3 1
思路:
我们定义一个二维数组,所有元素先初始化为0
给数组的第1列和对角线元素赋值为1
其余元素a[i][j]=a[i-1][j-1]+a[i-1][j]
输出这个二维数组的下三角
*/
//杨辉三角 如此标准
#include<stdio.h>
#include<stdlib.h>
#define N 5
int main()
{
int a[N][N]={0};//全为0
//初始化二维数组
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(j==0 || i==j)//注意是j==0而不是i==0
{
a[i][j]=1;
//下面两句与上面等价
//a[i][i]=1;
//a[i][0]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
// printf("%-8d",a[i][j]);//直接边赋值边打印
}
//printf("\n");
}
for(int i=0;i<N;i++)
{
printf("%*d",30-i*2,a[i][0]);//打印第一列 ,是*2,这里必须是下面控制字符的一半,才能落在中间的位置,代表每一行第一个数字与行的最前面的间隔字符
//这里的步长必须是下面的一半,才能落在 中间,这里30是一个随机的数字
/*
1 1 0 0 0
1 1 1 1 0 0
1 2 1 1 2 1 0
*/
for(int j=1;j<=i;j++)//之所以从j=1开始循环 ,因为第一列已经输出,要提取出来控制每行与行首的间隔
{
printf("%4d",a[i][j]);//%4d代表4个字符的宽度 ,如果这里改为%6d,则上面改为30-i*3
}
printf("\n");
}
//getchar();
system("pause") ;
}
二、一般的杨辉三角
/*
编写程序打印杨辉三角形
1 变形 1 0 0 0
1 1 1 1 0 0
1 2 1 1 2 1 0
。。。。。。 1 3 3 1
思路:
我们定义一个二维数组,所有元素先初始化为0
给数组的第1列和对角线元素赋值为1
其余元素a[i][j]=a[i-1][j-1]+a[i-1][j]
输出这个二维数组的下三角
*/
#include<stdio.h>
int main()
{
int a[4][4]={0};
printf("全部初始化为0\n");
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
printf("%-6d",a[i][j]);
}
printf("\n");
}
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(i==j || j==0)
{
a[i][j]=1;
//下面两句与上面等价
//a[i][i]=1;
//a[i][0]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
//输出杨辉三角
for(int i=0;i<4;i++)
{
for(int j=0;j<=i;j++)//j<4的话结果先前赋值为0的全变为随机的数了
{
printf("%-6d",a[i][j]);
}
printf("\n");
}
return 0;
}