蓝桥杯练习——2.22

蓝桥杯练习——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[i1][j]+a[i1][j1]
​ 代码分析:

​ 用全局变量建立二维数组,所有变量初始化为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函数用法

练习:LUOGU-P1156 垃圾陷阱

代码:

#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;
}

猜你喜欢

转载自blog.csdn.net/CrEeSa/article/details/114002914