当前位置:   article > 正文

ACM程序设计书中题目--P(粮食问题)_a斤

a斤

题目简述:有n斤粮食,按照一定比例兑换。输入a表示第i个仓库有a斤粮食,输入b表示换a斤粮食需要b斤别的东西。

解题思路:

1、首先考虑既然是按照一定的比例进行交换,则首先对于输入的每组数,求出其对应的比例。储存这些数据自然想到用结构体进行储存。

2、按照每组的比例从高到低进行排序,先交换比例高的,换完再换下一个,别的东西不够了,就按照比例进行交换,最后结果保留三位数输出。

3、涉及到排序问题,所以考虑到用sort函数,用到sort函数就考虑用到vector,所以对于vector<类型>进行了更进一步的强化。

4、输入-1,-1即程序结束。

解题感想:通过这一道题,更加熟练了对于动态数组的使用,在以后的做题中会考虑到vector中的类型可以有很多,而不只局限于int ,char等类型,也可以是自定义的类型。同时也对于排序中自定义排序规则得到了多一次的锻炼。对于这样一道比较简单的题,收获也比较多。

源代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct FatMouse
  4. {
  5. double a;
  6. double b;
  7. double c;
  8. };
  9. bool cmp(FatMouse a,FatMouse b)
  10. {
  11. if (a.c!=b.c)
  12. return a.c>b.c;
  13. else
  14. return a.b<b.b;
  15. }
  16. int main()
  17. {
  18. int N,M;
  19. FatMouse o;
  20. vector <FatMouse> d;
  21. while (cin>>M>>N)
  22. {
  23. if (M==-1&&N==-1)
  24. break;
  25. double sum=0;
  26. for (int i=0;i<N;i++)
  27. {
  28. cin>>o.a>>o.b;
  29. o.c=o.a/o.b;
  30. d.push_back(o);
  31. }
  32. sort (d.begin(),d.end(),cmp);
  33. for (int i=0;i<N;i++)
  34. {
  35. if (M>d[i].b)
  36. {
  37. M=M-d[i].b;
  38. sum=sum+d[i].a;
  39. }
  40. else
  41. {
  42. sum=sum+double(M)*d[i].c;
  43. break;
  44. }
  45. }
  46. cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
  47. d.clear();
  48. }
  49. return 0
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/957221
推荐阅读
相关标签
  

闽ICP备14008679号