求最多可以派出多少支团队(C++)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;//参赛人数
    cin >> n;
    vector<int> arr(n,0);//参赛者能力值
    for(int i = 0;i<n;i++){
        cin >> arr[i];
    }
    int limit;//参赛队伍能力门槛
    cin >> limit;
    //先对队伍能力值进行排序
    sort(arr.begin(),arr.end());
    //双指针法
    int count = 0;
    int left = 0;
    int right = arr.size() - 1;
    while(left < right){
        if(arr[left] >= limit){
            count = n;
            break;
        }
        if(arr[right]>=limit){//右边大,则独立成团,并向前进一位
            count++;
            right--;
        }
        else if(arr[left]+arr[right] >= limit){
            count++;
            left++;
            right--;
        }
        else{//总和小于定额,left向右移动
            left++;
        }
    }
    cout << count << endl;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要决这个问题,我们可以使用贪心算法来找出最大可能组成的三角形数量。 首先,我们需要对给定的木棍长度进行排序。 然后,我们可以从最长的木棍开始遍历,尝试找到可以与它组成三角形的两根木棍。 在遍历过程中,我们检查当前的木棍长度是否小于其他两根木棍长度之和。如果是,那么这三根木棍可以组成一个三角形,我们将计数器加一,并且将这三根木棍从集合中移除。 继续遍历下一根木棍,直到所有的木棍都被遍历完或者无法组成三角形为止。 下面是用C++语言实现该算法的代码: ```cpp #include <iostream> #include <vector> #include <algorithm> int countTriangles(std::vector<int>& sticks) { // 排序木棍长度 std::sort(sticks.begin(), sticks.end(), std::greater<int>()); int count = 0; int n = sticks.size(); // 遍历木棍寻找可组成的三角形 for (int i = 0; i < n - 2; i++) { int a = sticks[i]; int b = sticks[i+1]; int c = sticks[i+2]; // 判断是否可以组成三角形 if (a < b + c) { count++; // 移除已使用的木棍 sticks.erase(sticks.begin() + i, sticks.begin() + i + 3); n -= 3; // 重新开始遍历 i = -1; } } return count; } int main() { std::vector<int> sticks = {l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12}; int triangleCount = countTriangles(sticks); std::cout << "最多可以组成 " << triangleCount << " 个三角形" << std::endl; return 0; } ``` 请将代码中的 `l1, l2, ..., l12` 替换为对应的木棍长度。运行程序后,即可得到最多可以组成的三角形数量。 希望对你有所帮助!如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值