题目简述:有n斤粮食,按照一定比例兑换。输入a表示第i个仓库有a斤粮食,输入b表示换a斤粮食需要b斤别的东西。
解题思路:
1、首先考虑既然是按照一定的比例进行交换,则首先对于输入的每组数,求出其对应的比例。储存这些数据自然想到用结构体进行储存。
2、按照每组的比例从高到低进行排序,先交换比例高的,换完再换下一个,别的东西不够了,就按照比例进行交换,最后结果保留三位数输出。
3、涉及到排序问题,所以考虑到用sort函数,用到sort函数就考虑用到vector,所以对于vector<类型>进行了更进一步的强化。
4、输入-1,-1即程序结束。
解题感想:通过这一道题,更加熟练了对于动态数组的使用,在以后的做题中会考虑到vector中的类型可以有很多,而不只局限于int ,char等类型,也可以是自定义的类型。同时也对于排序中自定义排序规则得到了多一次的锻炼。对于这样一道比较简单的题,收获也比较多。
源代码:
#include <bits/stdc++.h>
using namespace std;
struct FatMouse
{
double a;
double b;
double c;
};
bool cmp(FatMouse a,FatMouse b)
{
if (a.c!=b.c)
return a.c>b.c;
else
return a.b<b.b;
}
int main()
{
int N,M;
FatMouse o;
vector <FatMouse> d;
while (cin>>M>>N)
{
if (M==-1&&N==-1)
break;
double sum=0;
for (int i=0;i<N;i++)
{
cin>>o.a>>o.b;
o.c=o.a/o.b;
d.push_back(o);
}
sort (d.begin(),d.end(),cmp);
for (int i=0;i<N;i++)
{
if (M>d[i].b)
{
M=M-d[i].b;
sum=sum+d[i].a;
}
else
{
sum=sum+double(M)*d[i].c;
break;
}
}
cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
d.clear();
}
return 0;
}