【C语言】-- 杨辉三角

目录

一.什么是杨辉三角?

二.实现方法

1.直角三角形版

2.等腰三角形版


一.什么是杨辉三角?

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

形如:

我们不难看出其存在明显的规律。

即:图片的两个斜边都是数字1其余的数都等于它所在层的肩上(即上一层)的两个数字之和。

二.实现方法

1.直角三角形版

如图:

我们先来实现上面这种简单的杨辉三角版本,由于这种规律是一层一层的,输出每一层时都要以上一层为基础。为此我们可以设置一个二维数组来存储这些数字,以每一层为数列的一行。听不懂的建议直接看下面的图示,更直观。

 上面这样的好处是让我们的代码写起来简洁,有规律,不繁琐。每次除输入每行的第一个和最后一个固定不变的1外,其余均可用 a[i][j] = a[i - 1][j - 1] + a[i - 1][j] 进行输入输出。

#include<stdio.h>
#define M 9
int main() {

	int a[M][M] = { 0 };

	for (int i = 0; i < M; i++) {
		
		for (int j = 0; j<=i; j++) {
			if (j == 0 || j == i) {
				a[i][j] = 1;
				printf("%d ", a[i][j]);
			}
			else {
				a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
				printf("%d ",a[i][j]);
			}
		}
		printf("\n");
	}
	return 0;
}

结果:

2.等腰三角形版

等腰三角形版这种图形就是真正的杨辉三角了,因此我们要考虑每一行的空格字符的输出了,

不难看出每一行的空格字符输出也是有规律的。

#define M 13  //意为打印M行杨辉三角
int main() {

	int a[M][M] = { 0 };
	int tmp = M;
	for (int i = 0; i < M; i++) {
		
		for (int j = 0; j < tmp - 1;j++) {	
			printf("   "); //三个空格,格式好看
		}
		tmp--;

		for (int j = 0; j<=i; j++) {
			if (j == 0 || j == i) {
				a[i][j] = 1;
				printf("%3d   ", a[i][j]); //%3d占三个字符,再加三个空格,格式好看
			}
			else {
				a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
				printf("%3d   ",a[i][j]);   //%3d占三个字符,再加三个空格,格式好看
			}
		}
		printf("\n");
	}
	return 0;
}

 结果:

猜你喜欢

转载自blog.csdn.net/m0_73381672/article/details/131278108