2043杨辉三角(C语言)

目录

一:题目

二:思路分析

三:代码


一:题目

二:思路分析

1.通过杨辉三角,不难发现中间的数等于肩头两个数之和

2.但是当我们的输出结果,与杨辉三角的形式有所不同,但是我们可以找到与杨辉三角相似的规律,即一个数等于上面的数和上面数的右边的的数的和(arrij = arri-1j+arri-1j-1)

3.这是又出现一个问题,如何用代码实现呢?我们只是找到了规律,但是如何应用规律呢?我们怎么赋值呢?

不难看出第一列和最后一个数都是1,那我们要把这两种情况单独拿出来讨论,将它们赋值为1吗?

这稍微有一点麻烦。

这时,不妨看一下我对杨辉三角第一行和第二行的理解,将它们理解为第一行的两边还有一个未显示的0,第二行的1是由第一行的1+0得到的,同理假设我们求的是五行杨辉三角,那么第二行的1是由第一行的1和它右边的0相加得到的,但是如果求五行,我们创建的是5*5的二维数组的话,第一行的1是第一行开始的数,如果访问它右边的数就越界了,所以这是不妨扩建数组为6*6的。

在这个基础上,我们只要把(1,1)处的值赋为1,再带入我们找到的规律,就可以得到结果了

4.对于杨辉三角,第i行有i个数,所以循环时i的范围是1~n,而j的范围是1~i

三:代码

复制代码
#include <stdio.h>
//2043杨辉三角
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[21][21] = { 0 };
	int i = 0, j =0;
	
	for (i = 1; i <= n; i++)//0~n
	{
		for (j = 1; j <= n; j++)
		{
			if (i == 1 && j == 1)
				arr[i][j] = 1;
			else
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];

		}
	}
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= i; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}
相关推荐
汉克老师2 分钟前
GESP2026年9月认证C++五级( 第三部分编程题(1、哥德巴赫猜想))精讲
c++·gesp·小学生·学c++编程
Discipline10294 分钟前
流水线运行是否正随时间变得更加集中?
算法
Logic1017 分钟前
C语言/数据结构位运算题解:异或XOR找出书柜中编号只出现一次的那一层——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
小灰灰搞电子9 分钟前
C++ final 关键字详解:从虚函数到类继承的完整指南
c++·final
lzhdim25 分钟前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
weixin_3077791331 分钟前
C++代码实现MATLAB中的pade函数功能
开发语言·c++·算法·matlab
smj2302_7968265233 分钟前
解决leetcode第4064题至多一次取反能被k整除的最长子数组II
python·算法·leetcode
AIGC小尼37 分钟前
ACE-Step-1.5 本地 AI 音乐模型实战|text2music 歌词转人声,部署脚本、参数调优与排坑全记录
人工智能·算法·comfyui·ai漫剧
ProcessOn官方账号38 分钟前
java IO操作 你快速认识IO的相关基本知识
java·开发语言
YOLO数据集集合44 分钟前
树木检测数据集 | 树木检测 树种分类 航拍林业 森林监测9131期
人工智能·算法·机器学习·分类·数据挖掘·林业·树种分类