【笔试】算法的暴力美学——牛客 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;
}
相关推荐
Lsk_Smion2 小时前
Hot100(开刷) 之 长度最小的数组--删除倒数第N个链表--层序遍历
java·数据结构·算法·kotlin
郝学胜-神的一滴3 小时前
从链表到二叉树:树形结构的入门与核心性质解析
数据结构·c++·python·算法·链表
北顾笙9803 小时前
day23-数据结构力扣
数据结构·算法·leetcode
阿Y加油吧5 小时前
栈的经典应用:字符串解码 & 每日温度 深度解析
数据结构·python·算法
千谦阙听5 小时前
数据结构最终章:万字详解排序算法!(内部排序)
c语言·数据结构·学习·算法·排序算法
断眉的派大星5 小时前
数据结构——指针
数据结构·算法
Magic-Yuan5 小时前
规范数据结构化处理难点分析
数据结构·人工智能
网安INF5 小时前
数据结构第四章复习:串
数据结构
楼田莉子5 小时前
仿muduo库的高并发服务器——项目基本认识及其相关概念
服务器·数据结构·c++·学习·设计模式