为什么以下代码无法运行

为什么以下代码无法运行,请求帮助

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(vector<int> a ,vector<int> b){
    int t1 = a[0];
    int t2 = a[1];
    int t3 = b[0];
    int t4 = b[1];
    return 1>2;
}
int main(){
    int n,t;
    cin >> n >> t;
    vector<vector<int> > gold(100);
    for(int i=0;i<n;i++){
        gold[i].resize(2);
    }
    for(int i=0;i<n;i++){
        cin >> gold[i][0] >> gold[i][1];
    }
    double ans=0;
    sort(gold.begin(),gold.end(),cmp);
    for(int i=0;i<n;i++){
        if(t>gold[i][0]){
            ans+=gold[i][1];
            t-=gold[i][0];
        }else{
            ans+=gold[i][1]*t/gold[i][0]*1.0;
            break;
        }
    }
    cout << ans;
    return 0;
}

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

bool cmp(vector<int> a, vector<int> b) {
    return (double)a[1] / a[0] > (double)b[1] / b[0];
}

int main() {
    int n, t;
    cin >> n >> t;

    vector<vector<int>> gold(n, vector<int>(2));
    for (int i = 0; i < n; i++) {
        cin >> gold[i][0] >> gold[i][1];
    }

    double ans = 0;
    sort(gold.begin(), gold.end(), cmp);

    for (int i = 0; i < n; i++) {
        if (t >= gold[i][0]) {
            ans += gold[i][1];
            t -= gold[i][0];
        } else {
            ans += gold[i][1] * (double)t / gold[i][0];
            break;
        }
    }

    cout << ans << endl;
    return 0;
}

【以下回答由 GPT 生成】

这段代码无法运行的问题是因为排序函数sort的比较函数cmp有问题。

bool cmp(vector<int> a, vector<int> b)函数中的返回语句return 1>2;始终返回false,导致排序函数sort没有按照指定的比较方式进行排序。

要解决这个问题,可以修改cmp函数中的比较方式。假设我们想要按照gold数组中每个子数组的第一个元素降序排序,那么可以修改cmp函数如下:

bool cmp(vector<int> a, vector<int> b){
    return a[0] > b[0];
}

重新编写的代码如下:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool cmp(vector<int> a, vector<int> b){
    return a[0] > b[0];
}

int main(){
    int n,t;
    cin >> n >> t;
    vector<vector<int>> gold(100);

    for(int i=0;i<n;i++){
        gold[i].resize(2);
    }

    for(int i=0;i<n;i++){
        cin >> gold[i][0] >> gold[i][1];
    }

    double ans=0;
    sort(gold.begin(),gold.end(),cmp);

    for(int i=0;i<n;i++){
        if(t>gold[i][0]){
            ans+=gold[i][1];
            t-=gold[i][0];
        }else{
            ans+=gold[i][1]*t/gold[i][0]*1.0;
            break;
        }
    }

    cout << ans;
    return 0;
}

请注意,代码已经修改,将原来的比较方式改为按照第一个元素降序排序。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^