大家好。今天我给大家带来的是,我们以前讨论过的知识点。杨辉三角。我相信大家在c的学习中已经清楚的了解和认识到了杨辉三角的实现逻辑和实现方法了。但是应该大多局限于在c中吧。我们都知道我们c++与c其实在一些地方是可以相互成就的。那么我们在c中的经典题目杨辉三角也可以用更加简洁方便的实现方法。所以今天我们就是来看看杨辉三角用c++如何实现和用c++实现的话会比c方便多少。
简单介绍杨辉三角
虽然是各位大佬都是知道杨辉三角了,但我想应该有忘掉的吧。为了保险起见我还是再给大家简绍一下,加深映像。相当于大家在复习一遍了。
那么我们还是先来看看杨辉三角长什么样子:
这里我们可以清楚看到我们的杨辉三角几个规律。第一个就是从头开始两边都是1就是每一行的开头与结尾都是1。然后就是第n行那么n行就有n个数。最后就是除了开头与结尾的值是确定的外,第n行的j的大小为上一行的j减一与上一行的第j个数的相加。我个人认为知道这三个规律大家应该就对实现杨辉三角和杨辉三角的基本认识就很清楚了。
然后就是实现这个代码的大概步骤了。首先我们要知道我们我们为什么要在简单了解vector后才开始写我们的杨辉三角,这就表明用vector的相关知识的话我们实现杨辉三角会简单很多。所以我把实现杨辉三角放在了vector后面。其次就是我们大概都了解如果实现杨辉三角多半要用二维数组吧。那么我们如何在c++中实现二维数组。最后就是我们如何实现我们前面的逻辑将每一行的头与尾都变为1然后中间的值改为上一行前两个值相加的和。
实现杨辉三角
那么我们在上面理出来了我们要实现杨辉三角的三个疑问了。那么我们就一一来处理。首先我们说过我们要使用vector中的向量,那么我们是不是要将vector在文章开头声明啊。
然后我们定义了vector的头文件后,我们就来想想,我们实现的话就用类对象,是吧。我们在c++开篇时候的博客中写过的。主要是我们需要想在c++中怎么实现二维数组。我们知道在c中的二维数组是int arr[i][j]就定义出来了。但是我们在c++中并且用vector的相关知识如何定义实现出来咧。我们知道,我们前面的博客中写了,我们vector构造函数的方法。我们写的样子是:
vector加一个<>括号里面跟数据类型。那么我们就创建了一个一维数组出来,那么我们二维数组的话,简单的想是不是多写一个<>就可以了呀,在里面写出vector啊。哈哈,其实大家不要想的太难了。就是这样写的
我们在一维数组前面在套一个vector<>这样我们就创建了一个vector的int类型二维数组。然后大家看我们在vv后面的小括号里面。按c的道理说,这个地方我们应该写几行几列的,但是我们这里的例子如果按顺序来看的话,我们是不是只把几行写出来了,就连几列的位置都没有留出来,说明我们可以在后面补充我们没一行有多少列。由于我们这里是引用的一个测试题的题目来的,所以有几行已经确定了,所以我们就不自己改了,后面大家如果在自己实现的话,可以尝试cin来自己输入多少行。
好了,我们这里既然已经确定了我们三个问题中的两个,一个是vector的引用,一个是二维数组的创建。好了,当我们看到这里我们就可以来确确实实的实现我们的c++杨辉三角了。
我们简单的看,我们已经将二维数组确定了,那么我们在实现的时候可以先从简单的开始,比如我们先将我们每一行有多少列实现出来啊,是吧。就是每一行有多少个数。这个也是很简单的噶。我们用一个循环来搞定,以下标为0开始那么我们没一行都是下标加1了,具体如何实现,大家看看下面的照片:
我们开前面说过我们要用到vector的相关知识这不,就出来了。我们的resize,在vector中作用可以理解为指定改变空间大小,如果原有的空间大小大于我现在设置的空间的大小的话那么就会删除对于的部分,如果小于的话就会扩大。并且我们如果在后面写了其他的初始化数据的话,也会在空间改变的时候对内存进行初始化。那么解读上面的图片的话就是,在vv的每一行开辟i+1个空间并且初始化为1。然后这里的思路就是,我将每一列的值都改为1,反正我改变值从上往下的,那么第二行改了,那么第三行也会在下一个循环被改变。当然然还可以分开写就是:
我们在捣鼓空间的时候不初始化,然后我们就将开头与结尾的值改为1就可以了,简单的写法就是我们被注释掉的部分。然后比较装逼的写法就是我们下面的样子front和back相当于我们的begin和end。这行代码的解读就是每一行的开头和结尾都改为1。这样我们实现每一行的开头与结尾为1的方法就有三种了。并且也将每一行有多少列实现了。
剩下的就是我们中间需要稍微计算的值了。但是这个很简单啊。是吧。二维数组嘛。并且我们在前面说过了其中的规律了,就是第n行的j的大小为上一行的j减一与上一行的第j个数的相加。那么两个for然后去掉每一行的开头与结尾其他的进行上面的公式相加就可以了。那么我们看看图片吧:
这里就简单了,我们因为知道我们第一行与第二行都是一,并且我们已经确定了值那么就可以不用进入循环了,然后就是我们每一行的开头与结尾也确定了,所以我们可以在第二行中剔出来。其他的就是我们要实际计算的位置了。
然后就是因为我们这里是为了应对题目所以在最后打印什么的就没有考虑,大家如果想要实现打印出来的话只需要在后面再写一个for循环来打印就可以了。
总结
c++实现杨辉三角其实不难,主要是我们不知道如何在c++中创建c++中的二维数组,和使用方法。还有我们对前面讲过的两个库函数的了解程度不够,所以我们对用c++实现的时候暂时不知道如何应对。其他的就没什么了,只需要我们有时间的话多看看文档,这些就解决了。当然实现杨辉三角的方法有很多,我们这里刚好讲了vector所以我就用了vector的相关知识。大家如果还有其他的想法和补充的话可以在评论区补充。٩꒰▽ ꒱۶⁼³₌₃ 学习去咯。