优秀的编程知识分享平台

网站首页 > 技术文章 正文

蓝桥杯备考冲刺必刷题(C++) | 3412 最小化战斗力差距

nanyue 2024-07-25 06:02:29 技术文章 25 ℃

学习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

Tags:

最近发表
标签列表