学习C++从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。
附上汇总贴:蓝桥杯备考冲刺必刷题(C++) | 汇总-CSDN博客
【题目描述】
小蓝是机甲战队的队长,他手下共有$n$名队员,每名队员都有一个战斗力值$w_i$。现在他需要将这$n$名队友分成两组$a$和$b$,分组必须满足以下条件:
- 每个队友都属于$a$组或$b$组。
- $a$组和$b$组都不为空。
- 战斗力差距最小。
战斗力差距的计算公式为$|max(a)-min(b)|$ , 其其中$max(a)$表示$a$组中战斗力最大的, $min(b)$表示$b$组中战斗力最小的。
请你计算出可以得到的最小战斗力差距。
【输入】
第一行一个整数$n$,表示队员个数。
第二行$n$个整数$w_1,w_2,w_3\dots w_n$,分别表示每名队友的战斗力值。
数据范围保证:$2\le n\le 10^5,1\le w_i\le 10^9$。
【输出】
输出一个整数,表示可以得到的最小战斗力差距。
【输入样例】
3
1 2 3
【输出样例】
1
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, minn=1e9;
int a[100005];
int main()
{
cin >> n; // 输入n
for (int i=1; i<=n; i++) { // 输入所有战斗力值
cin >> a[i];
}
sort(a+1, a+n+1); // 按照从小到大排序
for (int i=2; i<n; i++) { // 遍历a数组
minn = min(minn, abs(a[i]-a[i-1])); // 比较a[i]与a[i-1]、a[i+1]的差值的绝对值的最小值
minn = min(minn, abs(a[i]-a[i+1]));
}
cout << minn << endl; // 输出最小战斗力差距
return 0;
}
【运行结果】
3
1 2 3
1