其他分享
首页 > 其他分享> > C语言实现杨辉三角——非等腰及等腰

C语言实现杨辉三角——非等腰及等腰

作者:互联网

文章目录

前言

本文整理了几种打印杨辉三角的方法,包括非等腰形式打印和等腰形式打印

主要思路

杨辉三角的打印的解决分为两步

  1. 把数据储存到数组
  2. 按格式打印

如何生成数据

杨辉三角的数据应该用数组储存,
可以用二维数组储存,如下
在这里插入图片描述

各个元素利用递推公式arr[i][j]=arr[i-1][j]+arr[i-1][j-1]生成
这里需要注意的地方是

  1. 数组使用前必须初始化(上图中空白的三角的数据是0)
  2. i-1,j-1可能导致数组越界,解决方案是先把第一列全部赋值为1再用递推公式(有的方法会把第一列和对角线都先赋值为1再从第三行第二列开始填数据,其实没必要)
  3. 由于递推关系式只与前一行有关,数据其实可以用一维数组保存,需要注意的是为什么从后往前生成数据,详见代码注释

格式打印

注意三点

  1. 打印空格的规律从最后一行以及每行之间空格数的关系找
  2. 由于数据位数,需要控制字段宽度
  3. 打印完一个数字,需要在其后打印相应的空格

代码

非等腰

法一

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