赞
踩
题目简述:有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;

}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。