杨辉三角问题详解

杨辉三角问题详解

杨辉三角

1、模型介绍

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

下图就是一个杨辉三角(前7行)。
在这里插入图片描述

2、问题分析

要打印杨辉三角,我们首先要了解它具有的特性:
1、每个数等于它上方两数之和。(规律)
2、每行数字左右对称,由1开始逐渐变大。 (循环起始值)
3、第n行的数字有n项。(循环限制条件)
我们要构建一个二维数组,再通过循环来实现打印。

3、操作历程

假设我们要按照形式打印杨辉三角的前10行数

数组初始化

我们要先创建一个二维数组。
由于第10行中有10个数(性质3)为防止数组越界,我们可以如下创建与初始化数组。

int a[10][10] = {0};//在循环中用别的数字替换零。
循环实现

1、首先我们可以先使用一个循环来控制行数。

	for (int i=0; i<=10; i++)//数组下标从0开始
	    起始值  限制条件 控制i变化

2、接着我们可以再使用一个循环来控制每行数的个数。
由于杨辉三角中第n行的数字有n项。我们要更改循环的限制条件。

	for (int j=0; j<=i; j++)
	    起始值  限制条件 控制j变化

对每行中的数进行分析。
不难发现,每行中的第一个都是1(性质2),因此可以在循环中将它们赋值为1,
结合上述循环,可以写出如下框架:

*int main()
{
	int arr[10][10] = { 0 };
	for (int i=0; i<10; i++)
	{
		arr[i][0] = 1;//每行第一个数赋值为1
		for (int j=0; j<=i; j++)
		{
			
		}
	}

3、最终实现
再对每行中剩下的数进行分析。
可以发现:每个数等于它上方两数之和。(性质1)
假设这个数可以表示为a[i][j],表示它是第i+1行的第j+1个数。(从第二行开始,即i,j>=1)
那么它上面两个数在第i行,是第j个和第j+1个数,它们可以表示为a[i-1][j-1]和a[i-1][j]。
结合杨辉三角性质1,如下代码可得

if (i >= 1 && j >= 1)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}

4、源码及结果呈现

源码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//杨辉三角
int main()
{
	int arr[10][10] = { 0 };
	for (int i=0; i<10; i++)
	{
		arr[i][0] = 1;
		for (int j=0; j<=i; j++)
		{
		    if (i >= 1 && j >= 1)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
			printf("  %-3d", arr[i][j]);//-3表示靠左占三个空位,保证数字分开
		}
		printf("\n");//每行打印完之后换行
	}
	return 0;
}

结果呈现:
在这里插入图片描述
技术原因,只能靠左的形式呈现。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
杨辉三角问题是一个经典的数学问题,也是计算机编程中常见的题目。在CSDN上,可以找到许多关于杨辉三角问题的多种解法。 一种常见的解法是使用动态规划。这种方法是基于杨辉三角的性质,每一行的元素都是上一行元素的相邻两个元素之和。因此,可以创建一个二维数组,用来存储杨辉三角的每个元素。从第二行开始,根据上一行的数据计算当前行的数据。通过不断迭代,最终可以得到完整的杨辉三角。这种方法的时间复杂度为O(n^2),其中n表示杨辉三角的行数。 另一种解法是使用组合数的性质。由于杨辉三角每一行的数字都代表了组合数,可以利用组合数的公式进行计算。根据组合数的性质,可以使用递归或循环的方式,依次计算每个元素的值。这种方法的时间复杂度比动态规划低,为O(n^2)。 除了以上两种常见的解法,还可以使用数学公式、递归等方法来解决杨辉三角问题。具体选择哪种方法取决于问题的要求和个人的编程习惯。在CSDN上,可以找到不同作者分享的各种解法,可以根据自己的需求进行选择和学习。 总之,在CSDN上可以找到杨辉三角问题的多种解法,可以根据不同的需求和编程习惯选择合适的解法。这些解法不仅可以帮助解决杨辉三角问题,也可以提供思路和方法来解决其他类似的数学和编程问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值