王道机试指南 例题7.2 FatMouse's Trade
题目:
题目大意:
代码:
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; struct st{ double price;//每个仓库咖啡豆的单价 int seq;//记录仓库号 }; bool compare(st x,st y){ return x.price<y.price; } int main(){ int m,n; while(cin>>m>>n && (m!=-1 && n!=-1)){ int j[n],f[n]; for(int i=0;i<n;i++){ cin>>j[i]>>f[i]; } st s[n]; for(int i=0;i<n;i++){ s[i].price=(f[i]*1.0)/j[i]; s[i].seq=i; } sort(s,s+n,compare);//按单价排序 int i=0; double totalBean=0; while(m>0){//按单价从低到高购买咖啡豆,直到猫粮耗尽 int seq=s[i].seq; if(m>f[seq]){//剩余猫粮可以购买当前仓库的所有咖啡豆 totalBean+=j[seq]; m-=f[seq]; i++; } else{//剩余猫粮不够购买当前仓库的所有咖啡豆 totalBean+=((m*1.0)/f[seq])*j[seq]; m=0; } } printf("%5.3f\n",totalBean); } return 0; }
运行结果: