C哈的刷题计划之杨辉三角形(5)

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定义二维数组也没有错)。

cpp 复制代码
#include<bits/stdc++.h> // 引入标准库头文件,包含了C++标准库中大部分常用的组件
using namespace std; // 使用标准命名空间std,这样可以直接使用std命名空间中的函数和对象,而不需要std::前缀

// 全局变量定义
long long a[30][30]; // 声明一个30x30的二维数组a,用于存储计算结果
int n; // 存储输入的整数n

// 定义主函数,程序的执行从这里开始
int main()
{	
    // 从标准输入读取一个整数n
    cin >> n;
    
    // 外层循环遍历每一行,从1到n
    for(int i=1; i<=n; i++) {
        // 内层循环遍历每一列,从1到i(因为三角形的每一行长度递增)
        for(int j=1; j<=i; j++) {
            // 如果是每行的第一个元素,初始化为1
            if(j == 1)
                a[i][j] = 1;
            // 否则,根据上一行的两个相邻元素计算当前元素的值
            // 这是杨辉三角(Pascal's Triangle)的递推公式
            else
                a[i][j] = a[i-1][j] + a[i-1][j-1];
        }
   }
    
    // 外层循环遍历每一行,从1到n
    for(int i=1; i<=n; i++) {
        // 内层循环遍历每一列,从1到i
        for(int j=1; j<=i; j++) {
            // 输出当前元素的值
            cout << a[i][j] << " ";
        }
        // 每行结束后换行
        cout << endl;
    }
    return 0; // 程序执行结束,返回0表示程序正常退出
}

5、OJ测试

以上是我对杨辉三角形问题的思路探索,包括如何给学生授课,以什么样的形式授课,如何讲解知识点,对于低龄孩子我们又该做一些什么准备等,本来是想讲解知识点的,但是有感而发,讲了一些个人观点与看法,如果您有更好的想法,欢迎分享探讨,谢谢!。

大家写完代码之后如果想要做OJ(在线评测)测试,可以找我要相关的链接,电脑自动评测会更加准确~,也可以找我要相关的经典必刷题单(ps:教学经验中总结出来的必刷题单,真的是一步一步试错得到的经验,难怪人家总是说实践出真知),还是那句话,你关注的人,决定你看到的世界,好了,今天这篇文章就讲到这里,我们下期再见~

相关推荐
Ritsu栗子4 分钟前
代码随想录算法训练营day25
c++·算法
Milk夜雨35 分钟前
C++ 数据结构与算法——寻找最大素数因子的整数
数据结构·c++·算法
苹果3 小时前
C++二十三种设计模式之原型模式
c++·设计模式·原型模式
EnticE1524 小时前
[项目实战2]贪吃蛇游戏
开发语言·数据结构·c++·游戏
fadtes6 小时前
C++ constexpr(八股总结)
开发语言·c++
zhangzhangkeji6 小时前
c/c++ 里的进程间通信 , 管道 pipe 编程举例
c语言·c++
小wanga6 小时前
【C++】特殊类设计
android·c++
ℒฺℴฺνℯ̶ฺ归̶零̶⋆3187 小时前
0107作业
c++
无限码力7 小时前
目标值子矩阵的数量
c++·算法·矩阵
Stanford_11067 小时前
关于物联网的基础知识(三)——物联网技术架构:连接万物的智慧之道!连接未来的万物之网!
c++·物联网·学习·微信小程序·架构·twitter·微信开放平台