题目:1005,
题意:已知5种特定角的值分别为1,5,10,50,100;要求根据数P和a1,a2,a3,a4,a5的值求出最大最小钱币数
思路:(1)最少数:从最大的面值开始计算,p/b[i]的值为100张数,p%b[i]余数为下次p值,
(2)最大数:利用手中总值减去p值,得到的数k仍用最少数的方法求,得到的数用总张数减去即为最大张数
代码:
#include<iostream>
using namespace std;
int main()
{
int t,p,min,max;
int a[5];
int r,sum,k,q;
int b[5]={1,5,10,50,100};
cin>>t;
while(t--!=0)
{
sum=0;
min=0;
max=0;
k=0;
q=0;
cin>>p;
r=p;
for(int j=0;j<5;j++)
{
cin>>a[j];
sum=sum+b[j]*a[j];
q=a[j]+q;
}
for(int i=4;i>=0;i--)
{
if(r/b[i]<a[i])
{
min=min+r/b[i];
r=r%b[i];
}
else
{
min=min+a[i];
r=r-a[i]*b[i];
}
}
if(r!=0)
{
cout<<"-1"<<" "<<"-1"<<endl;
}else
{
k=sum-p;
for(int i=4;i>=0;i--)
{
if(k/b[i]<a[i])
{
max=max+k/b[i];
k=k%b[i];
}
else
{
max=max+a[i];
k=k-a[i]*b[i];
}
}
if(k==0)
{
max=q-max;
cout<<min<<" "<<max<<endl;
}
}
}
return 0;
}