【笔试】算法的暴力美学——牛客 BC140:杨辉三角

一、题目描述

二、算法原理

思路:根据题目要求:每个数 = 左上方 + 上方的值的和,那么我们简单模拟就行了;

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;
}
相关推荐
奋发向前wcx2 小时前
P2590 树的统计 题目解析
数据结构·算法·深度优先
额鹅恶饿呃4 小时前
C语言中的数据结构和变量
c语言·数据结构·算法
万法若空5 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表
tachibana26 小时前
hot100 翻转二叉树(226)
java·数据结构·算法·leetcode
兰令水6 小时前
leecodecode【面试150】【2026.7.9打卡-java版本】
java·数据结构·leetcode·面试·职场和发展
A.零点8 小时前
期末复习,408考研数据结构:第一章绪论完整知识梳理与真题深度解读
c语言·数据结构·笔记·考研
阿文的代码库9 小时前
经典算法题剖析:按奇偶排序数组
数据结构·算法
玛卡巴卡ldf11 小时前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣
Yang_jie_0313 小时前
笔记:数据结构(链队列的相关判断条件)
数据结构·笔记
zmzb010314 小时前
C++课后习题训练记录Day154
数据结构·c++·算法