蓝桥杯练习——2.22
文章目录
代码练习
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
题解:
问题观察:
观察输出样例,除了第一行第一个为1的数字外,其他数字均为该数字位置的上一行同列与上一行上一列数字之和。所以可以建立一个二维数组a[][]来处理,即
a
[
i
]
[
j
]
=
a
[
i
−
1
]
[
j
]
+
a
[
i
−
1
]
[
j
−
1
]
a[i][j] = a[i-1][j] + a[i-1][j-1]
a[i][j]=a[i−1][j]+a[i−1][j−1]
代码分析:
用全局变量建立二维数组,所有变量初始化为0。a[1][1]初始化为1,然后依照以上公式计算输出即可。
代码实现:
#include <bits/stdc++.h>
#define int long long
#define re register
#define il inline
using namespace std;
int n, a[40][40];
signed main()
{
ios::sync_with_stdio(false);
cin >> n;
a[1][1] = 1;
cout << 1 << endl;
for(int i = 2; i <= n; i++)
{
for(int j = 1; j <= i; j++)
{
a[i][j] = a[i-1][j]+a[i-1][j-1];
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
视频学习
2019年蓝桥杯训练营(C++) 3.1-使用sort排序视频讲解
学习心得:有关sort函数用法
代码:
#include <bits/stdc++.h>
#define int long long
#define re register
#define il inline
using namespace std;
struct node
{
int time, hgt, life;
} gunk[110];
int d, n;
int ti[110];
int dp[110]; //dp[height]=life
bool cmp(node a, node b)
{
return a.time < b.time;
}
signed main()
{
ios::sync_with_stdio(false);
cin >> d >> n;
for(re int i = 1; i <= n; ++i)
cin >> gunk[i].time >> gunk[i].life >> gunk[i].hgt;
sort(gunk + 1, gunk + n + 1, cmp);
dp[0] = 10;
for(re int i = 1; i <= n; ++i)
for(re int j = d; j >= 0; --j)
if(dp[j] >= gunk[i].time) //survive
{
if(j + gunk[i].hgt >= d) //climb out
{
cout << gunk[i].time;
return 0;
}
dp[j + gunk[i].hgt] = max(dp[j], dp[j + gunk[i].hgt]); //climb up
dp[j] += gunk[i].life; //continue life(?
}
cout << dp[0] << endl;
return 0;
}