您的位置:首页 > 其它

F

2016-03-24 09:56 330 查看
题目编号: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: