这道题终于被我切了,昨天下午提交了几次都wa,今天冷静的想了下就把它给切了;
主要是个思路问题,注意几个地方:(1)你投进去的钱是要恰好等于它的价值 (2)要硬币数量最多。。
附上代码
:#include <iostream>
using namespace std;
int cnt_i,cnt_j,flag;
void eg(int a,int b,int c,int n)
{
for(int i=0;i<=c;i++)
for(int j=0;j<=b;j++)
{
int t=n-i*10-j*5;
if(t<0)return;
if(t<=a)
{
flag=1;
cnt_i=i;
cnt_j=j;
return;
}
}
}
int main()
{
int n,a,b,c;
while(cin>>n>>a>>b>>c)
{
if(n==0&&a==0&&b==0&&c==0)break;
if(a>=n)
{
printf("%d YiJiao, %d WuJiao, and %d ShiJiao\n",n,0,0);
continue;
}
int t=n/5;
if(!t)
{
printf("Hat cannot buy tea.\n");
continue;
}
flag=0;
eg(a,b,c,n);
if(flag)
printf("%d YiJiao, %d WuJiao, and %d ShiJiao\n",n-cnt_i*10-cnt_j*5,cnt_j,cnt_i);
else
printf("Hat cannot buy tea.\n");
}
return 0;
}