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


学习C++从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。

附上汇总贴:蓝桥杯备考冲刺必刷题(C++) | 汇总-CSDN博客


​【题目描述】
小蓝是机甲战队的队长,他手下共有 n n n名队员,每名队员都有一个战斗力值 w i w_i wi。现在他需要将这 n n n名队友分成两组 a a a b b b,分组必须满足以下条件:

  • 每个队友都属于 a a a组或 b b b组。
  • a a a组和 b b b组都不为空。
  • 战斗力差距最小。
    战斗力差距的计算公式为 ∣ m a x ( a ) − m i n ( b ) ∣ |max(a)-min(b)| max(a)min(b) , 其其中 m a x ( a ) max(a) max(a)表示 a a a组中战斗力最大的, m i n ( b ) min(b) min(b)表示 b b b组中战斗力最小的。
    请你计算出可以得到的最小战斗力差距。
    【输入】
    第一行一个整数 n n n,表示队员个数。
    第二行 n n n个整数 w 1 , w 2 , w 3 … w n w_1,w_2,w_3\dots w_n w1,w2,w3wn,分别表示每名队友的战斗力值。
    数据范围保证: 2 ≤ n ≤ 1 0 5 , 1 ≤ w i ≤ 1 0 9 2\le n\le 10^5,1\le w_i\le 10^9 2n105,1wi109
    【输出】
    输出一个整数,表示可以得到的最小战斗力差距。
    【输入样例】
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
  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值