AT_joi2020_yo1b_a 实验(Exam ) 题解

· · 题解

题目大意

给定 A,B,C ,求出三者之中较大两者的和。

做法

排个序是最简单的。

这里科普一下 C++11 的新特性—— lambda 表达式。本质上就是一个类。

相当于一个功能闭包,也可以说是匿名函数,可以在一些操作较简单单独封装成一个函数比较麻烦的时候使用。

语法格式:

[cap](par)opt->type{body}

cap 是捕获列表(一定要有),par 是参数列表(没有可以省略),opt 是函数选项( mutable 或者 const ,默认 const ),type 是返回值类型(可以让编译器自行判断),body 是函数体。

[ ] 不捕获任何变量。

[&] 捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。

[=] 捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。

[=,&foo] 按值捕获外部作用域中所有变量,并按引用捕获 foo 变量。[bar] 按值捕获 bar 变量,同时不捕获其他变量。

[this] 捕获当前类中的 this 指针,让 lambda 表达式拥有和当前类成员函数同样的访问权限。如果已经使用了 & 或者 =,就默认添加此选项。捕获 this 的目的是可以在 lamda 中使用当前类的成员函数和成员变量。——摘自这篇文章

可了解的还是很多的,可以少一些码量、让代码更好看 / 直观。其他的可以自行百度。这里我们只要实现 cmp 函数即可。

代码(C++11 及以上):

#include<bits/stdc++.h>
using namespace std;
int a[5];

int main(){
    scanf("%d%d%d",&a[0],&a[1],&a[2]);
    sort(a,a+3,[](int a,int b){return a>b;});//lambda 函数体记得打分号。
    printf("%d",a[0]+a[1]);
    return 0;
}