题目大意
解题思路
贪心思路要换取的咖啡豆最多,就要考虑性价比的高低,将N个房间定义为一个结构体数组,利用sort函数按照性价比从高到低排序,依次购买,直至M=0。
代码实现
#include<bits/stdc++.h>
using namespace std;
struct mouse{
double j; //咖啡豆
double f; //猫粮
double rate;
}JavaBean[1005]; //结构体
bool cmp(mouse a,mouse b){
return a.rate>b.rate;
} //排序规则
int main()
{
while(1){
int M,N;
double res=0; //最终用M猫粮可以换取的咖啡豆数量
cin>>M>>N;
if(M==-1&&N==-1)
break; //输入循环终止条件
for(int i=0;i<N;i++){
cin>>JavaBean[i].j>>JavaBean[i].f ;
JavaBean[i].rate =JavaBean[i].j /JavaBean[i].f ;
} //处理结构体数组里的数据
sort(JavaBean,JavaBean+N,cmp); //调用sort函数对结构体数组排序
for(int i=0;i<N;i++){
if(M>=JavaBean[i].f ){ //当现有的猫粮大于该组的猫粮数
res+=JavaBean[i].j;
M-=JavaBean[i].f;
}
else{ //现有的猫粮不足以全部换取改组的猫粮数
res=JavaBean[i].rate*M+res;
break;
}
}
printf("%.3f\n",res);
}
return 0;
}
bug
编译错误 res的数据类型定义错误
格式错误 输出结果时没有加上换行