首篇题解c++
2025-07-13 17:34:57
发布于:浙江
12阅读
0回复
0点赞
题目大意:
输入numRows,输出「杨辉三角」的前numRows行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
就是这样: (不想写太多因为懒)
这个题我定眼一看,就觉得要用vector动态数组(不用数组是因为懒)
因为有多行数据,所以用struct,再加上一点点脑力,就可以写出来了
话不多说,上代码
AC CODE:
#include <bits/stdc++.h>
using namespace std;
struct stu{
vector<int> a;
} s[35];//定义结构体,用来存储数据和做相加
int main(){
int n;//懒得写numRows,直接用简写n
cin>>n;
s[1].a.push_back(1);//初始化数组,不然相加没有东西加
for(int i=2;i<=n;i++){
for(int j=0;j<i;j++){
if(j==0){
s[i].a.push_back(s[i-1].a[j]);//第一个数只需要把上一行的第一个数拿下来就可以了,需特判
}else if(j==i-1){
s[i].a.push_back(s[i-1].a[j-1]);//最后一个数只需要上行的最后一个数,也特判。但由于每层的数个数差一,所以是j-1
}else{
s[i].a.push_back(s[i-1].a[j-1]+s[i-1].a[j]);//最正常的、中间的数只需要上行同列和上列的数相加就可以了
}
}
}
cout<<"[";//输出的第一层头括号
for(int i=1;i<=n;i++){
cout<<"[";//第二层头括号
for(int j=0;j<s[i].a.size()-1;j++){//由于最后一个数后不需逗号,所以跳出循环后再输出
cout<<s[i].a[j]<<",";
}
cout<<s[i].a[s[i].a.size()-1]<<"]";//第二层尾括号
if(i!=n){
cout<<",";//和上面一样,不需逗号,特判就行了
}
}
cout<<"]"<<endl;//第一层尾括号
return 0;
}
看了/用了记得点点赞叭!
这里空空如也
有帮助,赞一个