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
原创粉丝点击