杨辉三角(超详解)

目录

一、问题描述

二、杨辉三角是什么?

三、杨辉三角简陋版实现

3.1 代码思路

3.2 代码实现

3.3 运行结果

 四、杨辉三角优化版实现

 4.1 代码分析

 4.2 代码实现

 4.3 运行结果


一、问题描述

在屏幕上面打印杨辉三角。

二、杨辉三角是什么?

在百度百科中是这样解释的:

     杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

杨辉三角(超详解)_第1张图片

 杨辉三角的特点:

  1. 每个数等于它上方两数之和。

  2. 每行数字左右对称,由1开始逐渐变大。

  3. 第n行的数字有n项。

  4. 前n行共[(1+n)n]/2 个数。

  5. 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。

三、杨辉三角简陋版实现

3.1 代码思路

杨辉三角(超详解)_第2张图片

像上面的杨辉三角我们可以把它抽象一下,将前面的空格去掉:

杨辉三角(超详解)_第3张图片

     我们可以看出上述图像中的特点:

  1. 第一列和对角线都是1。
  2. 其余元素等于上一行两个元素相加的和。 

我们可以把它看做一个二维数组:

 杨辉三角(超详解)_第4张图片

 3.2 代码实现

#include 
int main()
{
	int arr[10][10] = { 0 };
	int i = 0;
	int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j <= i; j++)
		{
			if (j == 0)
				arr[i][j] = 1;
			if (i == j)
				arr[i][j] = 1;
			if(i>=2&&j>=1)
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
		}
		
	}
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j <= i; j++)
		{
			printf("%-4d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

3.3 运行结果

杨辉三角(超详解)_第5张图片

 四、杨辉三角优化版实现

 4.1 代码分析

     我们发现在简陋版的实现中,我们把杨辉三角有关数字打印出来了,但是我们没有打印出空格,我们发现在第一行数字、第二行......前面都有空格符,所以优化版主要解决空格问题。

 4.2 代码实现

#include 
#define N 10

int main()
{
	int arr[N][N] = { 0 };
	int i = 0;
	int j = 0;
	for (i = 0; i < N; i++)
	{
		int ret = (N - i - 1)*2;
		while (ret--)
		{
			printf(" ");
		}
		for (j = 0; j <= i; j++)
		{
			if (j == 0)
				arr[i][j] = 1;
			if (i == j)
				arr[i][j] = 1;
			if (i >= 2 && j >= 1)
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
			printf("%-3d ", arr[i][j]);
		
		}
		printf("\n");

	}
	
}

     注意:在这里我们为了代码最终实现的美观,所以我们在打印空格时*2,由于数字有的是三位数,有的是一位数,为了规范,我们在这里也规定打印数字时打印3位且左对齐。

4.3 运行结果

杨辉三角(超详解)_第6张图片

 

你可能感兴趣的:(c语言,蓝桥杯,开发语言)