杨辉三角
首先杨辉三角如下:
从第三行开始,除首尾是1外中间的数都等于其“肩”上的两位数之和。
Q:那么如何用控制台输出杨辉三角?
思路一:
先列表
将没有值的地方填充为 0
然后可以动态创建两个一维数组a和b,一个用于当前列的输出;一个用于记录上一列的值,并为下一列赋值。在第0行和第1行的时候,b数组总是复制a数组的值。到第2行时,b数组的用处就开始了,因为若a加上前一个数的值付给a时,原来的值就不见了,再循环就会出现如下错误:
所以b数组的存在就是为了避免这种情况发生。
用两个数组可以减少建二维数组做表所用的的存储空间,提高效率。
源代码:
yang是定义的方法,在入口函数main的文件中写,需在调用前定义好。
下列代码在vs2019社区版可以运行。
//*************code by senlinxing
#include <iostream>
using namespace std;
void yang(int n)
{
int* a = new int[n];//这里是动态分配数组,因为直接int a[n]是不对的,中括号里的是常量不是变量
int* b = new int[n];//记录上一行的数组
for (int x = 0; x < n; x++)
{
a[x] = 0;//初始化
b[x] = 0;//初始化
}
for (int i = 0; i < n; i++)//行
{
for (int j = 0; j < i + 1; j++)//列
{
if (i < 2)
{
a[j] = 1;
b[j] = 1;
cout << a[j] << " ";
}
else
{
if (j == 0)
{
a[j] = a[j] + a[n - 1];//第2(行从0开始)行开始第一个数字的上方两位是它本身列号和最后一列的相加
b[j] = a[j];
cout << a[j] << " ";
}
else
{
b[j] = a[j];
a[j] = b[j] + b[j - 1];
cout << a[j] << " ";
}
}
}
cout << endl;
}
}
int main()
{
yang(6);//参数是输出的杨辉三角行数
return 0;
}
//*************
运行效果:
输出6行杨辉三角
输出20行
以上。
(ps:当时笔试自己逻辑绕弯了没写完整,应该敲头喔)