
一、题目描述

二、算法原理
思路:根据题目要求:每个数 = 左上方 + 上方的值的和,那么我们简单模拟就行了;
1)创建一个二维数组
2)先把第一个数字 1 入到二维数组中,以他为基准,让下面的数字不断的计算
3)不断的根据题目的要求计算当前的数字,每个数 = 左上方 + 上方的值的和,当我们计算出来的值等于 0 就没有必要入二维数组了,在杨辉三角中的值是没有等于 0 的;注意:当前我们只要计算出来杨辉三角的值就行了,不要注意格式输出;
4)控制格式输出,我们把杨辉三角的值转成 string ,当这个 string 的长度小于 5 时,就计算题目的长度差:5 - string.size();往 string 补充长度差个的空格;
三、代码实现
cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
vector<vector<int>> vis(n);
vis[0].push_back({1});//初始化
for(int i = 1; i < n; i++)//构造杨辉三角
{
int j = 0;
while(true)//每行的数字的获取
{
//当前的数字 = (横坐标 - 1 ,纵坐标相同) + (横坐标 - 1 ,纵坐标 - 1)
//注意越界情况
int left = (j - 1 < 0 || j - 1 >= vis[i - 1].size()) ? 0 : vis[i - 1][j - 1];
int right = j < vis[i - 1].size() ? vis[i - 1][j] : 0;
int cout = right + left;
if(cout == 0) break;
vis[i].push_back(cout);
j++;
}
}
int x = vis.size();
for(int i = 0; i < x; i++)//打印杨辉三角,控制格式输出
{
for(int j = 0; j < vis[i].size(); j++)
{
string s = to_string(vis[i][j]);
if(s.size() < 5)
{
int seq = 5 - s.size();
string tmp(seq,' ');
s = tmp + s;
}
cout << s;
}
cout << endl;
}
return 0;
}