学习C++从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。
附上汇总贴:蓝桥杯备考冲刺必刷题(C++) | 汇总-CSDN博客
【题目描述】
现在给定
N
N
N个数,要求你从这
N
N
N个数中挑选出来三个数,请你求出这三个数的和中第三大的是多少?
请注意,如果在求和的过程中出现了相同的和,那么只能保留一个,其他的需要忽略不计。
【输入】
输入的第一行包含一个整数
n
n
n,表示数字的数量。
输入的第二行包含
n
n
n个数字,代表给出的数字序列。
【输出】
输出一行,包含一个数字,代表第三大的和。
【输入样例】
5
1 2 3 4 5
【输出样例】
10
【代码详解】
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, a[105], b[161705];
bool cmp(int x, int y)
{
return x>y;
}
signed main()
{
cin >> n; // 输入n
for (int i=1; i<=n; i++) { // 输入n个数字
cin >> a[i];
}
int mark=0; // 求3个数字和
for (int i=1; i<=n; i++) {
for (int j=i+1; j<=n; j++) {
for (int k=j+1; k<=n; k++) {
b[++mark] = a[i]+a[j]+a[k];
}
}
}
sort(b+1, b+mark+1, cmp); // 按照从大到小排序
int cnt=1;
int last = a[1]; // 定义起始值
for (int i=2; i<=mark; i++) { // 从第二个开始判断
if (b[i]!=last) { // 只有当与前一个不一致时,cnt才加1
cnt++;
}
last = b[i]; // 更新last
if (cnt==3) { // 当cnt等于3时,则为第三大的数
cout << b[i] << endl; // 输出并退出
exit(0);
}
}
return 0;
}
【运行结果】
5
1 2 3 4 5
10