F
来源:互联网 发布:淘宝a店b店c店 编辑:程序博客网 时间:2024/04/28 19:21
题目编号:F
题目大意:有1元5元10元50元100元的纸币若干,给定的数额,求最少和最大的张数。没有则”-1 -1“输出。
解题思路:根据观察发现,求最少的很好求,求最多的倒是需要考虑很多。则通过转化可以将求最多的转化为总数减去定额的差最少,那么剩下的就是最多的。所以只要求最多的 就可以了。先创建数组2个,把1-100元的用数组表示出来和给定的张数加入另一数组。给定的额数除以最大的张数100的商与给的100张数比较,哪个小用那个,循环 其他的即可。
做题感想:本来思路是想到了,细节方面老是出错。主要是心态关系,打算1小时之内弄出来的,结果拖了1个半小时,是自己心急了,如果平心静气的写,估计细节如注意到,以 后自己在心态方面要锻炼!努力努力!
#include<iostream>using namespace std;int brr[]={0,1,5,10,50,100};int main(){ int a,b,c,d,e,min,max; int arr[6]; int i,j,k,sum; cin>>a; while(a--) { sum=d=e=j=min=0; cin>>b; c=b; for(i=1;i<=5;i++) { cin>>arr[i]; d+=arr[i]; sum+=brr[i]*arr[i]; } for(i=5;i>0;i--) { if(c/brr[i]<arr[i]) { j=c/brr[i]; c-=brr[i]*j; min+=j; } else { j=arr[i]; c-=j*brr[i]; min+=j; } } if(c!=0) { cout<<"-1 -1"<<endl; }else { k=sum-b; for(i=5;i>0;i--) { if(k/brr[i]<arr[i]) { j=k/brr[i]; k-=brr[i]*j; e+=j; } else { j=arr[i]; k-=j*brr[i]; e+=j; } } max=d-e; if(k==0) { cout<<min<<" "<<max<<endl; } } } return 0;}
0 0
- f
- f
- f
- f
- f
- F#
- f
- F
- f
- f
- f
- f
- f
- f
- F
- f
- f
- F
- Java内存模型FAQ(十一)新的内存模型是否修复了双重锁检查问题?
- js入门
- 221. Maximal Square | Java最短代码实现
- ns3中antenna module
- 使用Service和BroadcastReceiver实时监听网络状态
- F
- 范围解析操作符 (::)
- 几种分布式消息系统比较(old)
- WireShark帧格式解析
- App架构经验总结
- 数据结构之栈和队列
- oracle 复制一个表数据 到另一个表中,select into与insert into
- JobReview 2016/3/24
- Android性能优化:SparseArray