1、盲听C哈说
哈喽,大家好,我是小C,一个每天嘻嘻哈哈的斜杠女青年。一直受一句话的影响 — "你关注的人,决定你看到的世界!" 现在是2024年12月20日早上9点,距离过年只剩一个多月了,总想在今年最后阶段留下些什么,老样子,今天还是给大家分享一道关于二维数组知识点的习题 — 杨辉三角形。
你们知道吗?在数学的世界里,有一个非常神奇的图形,它看起来像是由许多星星组成的三角形,我们叫它杨辉三角形。这个三角形不仅美丽,而且藏着很多有趣的秘密哦!今天,我们就一起来用C++代码探索这个神秘的杨辉三角形,并打印出它的前20行。
2、问题描述
(1)题目描述
打印杨辉三角形的前n(2≤n≤20)行。杨辉三角形如下图,当n=5:
输出:
(2)输入描述
输入行数n。
(3)输出描述
输出如题述三角形。n行,每行各数之间用一个空格隔开。
(4)样例输入
5
(5)样例输出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
3、问题分析
杨辉三角形是学习二维数组知识点时必刷的题目之一,杨辉三角形(也称为帕斯卡三角形)是一个经典的数学概念,它在编程中常被用来考查学生的多方面能力,例如基础编程能力、逻辑思维能力、数学应用能力等。
首先,当我们对一个问题没有任何头绪和解题思路的时候,找规律是重要且有效的手段之一,以问题中的输出样例为例:当n=5,给出一个5行5列的杨辉三角形,一起来观察看看它有哪些特点。
通过观察,我们发现,杨辉三角形的每一行的开头和结尾都是1,即 ① 杨辉三角形的第1列都是1;② 当行号=列号时,该行该列所对应的数据元素的值也为1。杨辉三角形具有对称性,即从左到右和从右到左读取的数字是相同的。
进一步观察我们发现:除了每一行开头与结尾数字1,其它的每个数字都是由上一行对应位置的两个数字相加,那么对应的位置的两个数字具体指的是哪里呢?请看图示:
我们假设存放数据的二维数组名字为a,即a[5][2] = a[4][2] + a[4][1], 因此我们可以得出公式:a[i][j] = a[i-1][j] + a[i-1][j-1];
对于这道题,首先定义一个二维数组,根据我们上面推导出来的公式先算出杨辉三角形的前20行数据,将其存放在二维数组中,然后根据不同的输入n,输出题目要求的前n行。
其实,学到后面你会发现,编程和数学一样,都是探索世界的工具,对于低年龄段的孩子,可以选择用实物演示,用积木或者糖果等实物来构建一个小型的杨辉三角形,让孩子们直观地看到每一层是如何构建的,如果没有条件,一定要在黑板上或纸上画出杨辉三角形的构建过程,让孩子们看到形状和数字的排列;为了增加讲课的趣味性,教师们可以顺带讲解杨辉三角形的历史,比如它在中国和欧洲的起源,让孩子们对这一数学概念产生兴趣,同时为了便于孩子理解,教师可以用故事的形式比喻解释杨辉三角形的形成,比如“星星的家”(每行的星星是如何从上一行的星星“家中”来的),以上这些动作,都是为了让孩子更好地理解杨辉三角形的构成原理,不要一上来就讲很高深的东西,没孩子愿意听的(特别选手除外哈哈),虽然这个过程可能耗费一些时间,但是比起囫囵吞枣,我觉得这样做更有意义,弄懂一道题,远比,弄懂一堆题来得重要得多。
4、代码实现
为了尽可能能够计算出更多杨辉三角形的数据,防止数据数值太大int无法存放,在这里,二维数组我用long long类型来定义(本道题即使你不用long long定义二维数组也没有错)。
#include<bits/stdc++.h> // 引入标准库头文件,包含了C++标准库中大部分常用的组件
using namespace std; // 使用标准命名空间std,这样可以直接使用std命名空间中的函数和对象,而不需要std::前缀// 全局变量定义
long long a[30][30]; // 声明一个30x30的二维数组a,用于存储计算结果
int n; // 存储输入的整数n// 定义主函数,程序的执行从这里开始
int main()
{ // 从标准输入读取一个整数ncin >> n;// 外层循环遍历每一行,从1到nfor(int i=1; i<=n; i++) {// 内层循环遍历每一列,从1到i(因为三角形的每一行长度递增)for(int j=1; j<=i; j++) {// 如果是每行的第一个元素,初始化为1if(j == 1)a[i][j] = 1;// 否则,根据上一行的两个相邻元素计算当前元素的值// 这是杨辉三角(Pascal's Triangle)的递推公式elsea[i][j] = a[i-1][j] + a[i-1][j-1];}}// 外层循环遍历每一行,从1到nfor(int i=1; i<=n; i++) {// 内层循环遍历每一列,从1到ifor(int j=1; j<=i; j++) {// 输出当前元素的值cout << a[i][j] << " ";}// 每行结束后换行cout << endl;}return 0; // 程序执行结束,返回0表示程序正常退出
}
5、OJ测试
以上是我对杨辉三角形问题的思路探索,包括如何给学生授课,以什么样的形式授课,如何讲解知识点,对于低龄孩子我们又该做一些什么准备等,本来是想讲解知识点的,但是有感而发,讲了一些个人观点与看法,如果您有更好的想法,欢迎分享探讨,谢谢!。
大家写完代码之后如果想要做OJ(在线评测)测试,可以找我要相关的链接,电脑自动评测会更加准确~,也可以找我要相关的经典必刷题单(ps:教学经验中总结出来的必刷题单,真的是一步一步试错得到的经验,难怪人家总是说实践出真知),还是那句话,你关注的人,决定你看到的世界,好了,今天这篇文章就讲到这里,我们下期再见~