为什么以下代码无法运行,请求帮助
#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;
}
请注意,代码已经修改,将原来的比较方式改为按照第一个元素降序排序。
【相关推荐】