C语言实现杨辉三角——非等腰及等腰
作者:互联网
文章目录
前言
本文整理了几种打印杨辉三角的方法,包括非等腰形式打印和等腰形式打印
主要思路
杨辉三角的打印的解决分为两步
- 把数据储存到数组
- 按格式打印
如何生成数据
杨辉三角的数据应该用数组储存,
可以用二维数组储存,如下
各个元素利用递推公式arr[i][j]=arr[i-1][j]+arr[i-1][j-1]生成
这里需要注意的地方是
- 数组使用前必须初始化(上图中空白的三角的数据是0)
- i-1,j-1可能导致数组越界,解决方案是先把第一列全部赋值为1再用递推公式(有的方法会把第一列和对角线都先赋值为1再从第三行第二列开始填数据,其实没必要)
- 由于递推关系式只与前一行有关,数据其实可以用一维数组保存,需要注意的是为什么从后往前生成数据,详见代码注释
格式打印
注意三点
- 打印空格的规律从最后一行以及每行之间空格数的关系找
- 由于数据位数,需要控制字段宽度
- 打印完一个数字,需要在其后打印相应的空格
代码
非等腰
法一
void yangHuiTriangle(int n)
{
int data[30][30] = { 1 }; //第一行直接填好,播下种子
int i, j;
for (i = 1; i < n; i++) //从第二行开始填
{
data[i][0] = 1; //每行的第一列都没有区别,直接给1,保证不会越界。
for (j = 1; j <= i; j++) //从第二列开始填
{
data[i][j] = data[i - 1][j] + data[i - 1][j - 1]; //递推方程
}
}
for (i = 0; i < n; i++) //填完打印
{
for (j = 0; j <= i; j++)
{
printf("%d ", data[i][j]);
}
putchar('\n');
}
}
法二
void yangHuiTriangle(int n)
{
int data[30] = { 1 };
int i, j;
printf("1\n"); //第一行就直接打印了
for (i = 1; i < n; i++) //从第二行开始
{
for (j = i; j > 0; j--) //从后向前填,避免上一行的数据在使用前就被覆盖
{
data[j] += data[j - 1]; //公式同上,由于变成了一维,公式也变简单了。
}
for (j = 0; j <= i; j++) //这一行填完就直接打印了。
{
printf("%d ", data[j]);
}
putchar('\n');
}
}
法三
void fun()
{
int a[7][7] = { 0 }, i, j;
for (i = 0; i < 7; i++)
{
a[i][0] = 1;
a[i][i] = 1;
}
for (i = 2; i < 7; i++)
{
for (j = 1; j < 7; j++)
{
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
}
for (i = 0; i < 7; i++)
{
for (j = 0; j < i + 1; j++)
{
printf("%3d", a[i][j]);
}
printf("\n");
}
}
等腰
#include<stdio.h>
#define N 10
int main(void)
{
int row, col;
int colsOfRow;
int yh[N] = { 1 };//N代表最后一行要打印多少个数
for (row = 0; row < N; row++)//外层循环控制每行,内层循环具体打印每一列
{
colsOfRow = row + 1;//colsOfRow代表每行打印的数字的个数
for (col = colsOfRow - 1; col > 0; col--)//col>0使得下面col-1不会越界
yh[col] = yh[col] + yh[col - 1];//产生新行
/*for(col=0; col<colsOfRow; col++)
printf("%5d",yh[col]);
putchar('\n');*/
for (col = 0; col < N - row - 1; col++)//最后一行打印0个空格,所以第一行打印9个空格,所以是N-row-1
printf(" ");//三个空格,因为会出现三位数
for (col = 0; col < colsOfRow; col++)
printf("%3d%s", yh[col], " ");//注意每打完一个数字,要在其后打印三个空格,因为后面还有数字要打印
putchar('\n');
}
return 0;
}
标签:int,等腰,打印,C语言,++,杨辉三角,data,col 来源: https://blog.csdn.net/m0_56611833/article/details/119486015