题意:求最多和最少,需要的零钱数
思路:求最多的就是从大的找,找最少的,就是找出花的最多,然后做减法
#include <iostream>
using namespace std;
int b[10] = {0, 1, 5, 10, 50, 100};
int sp(int money, int a[10], int b[10], int c[10])
{
for (int i=5; i>0; i--)
{
if (money / b[i] < a[i])
{
c[i] = money / b[i];
money -= c[i] * b[i];
}
else
{
c[i] = a[i];
money -= c[i] * b[i];
}
}
return money;
}
int main()
{
int t, k, sum;
cin >> t;
int a[10], c[10], e[10];
while(t--)
{
sum = 0;
int money;
cin >> money;
int charge;
charge = money;
for (int i=1; i<=5; i++)
{
cin >> a[i];
sum += b[i] * a[i];
}
charge = sp(charge, a, b, c);
if (charge != 0)
{
cout << "-1" << " " << "-1" << endl;
}
else
{
k = sum - money;
k = sp(k, a, b, e);
if (k == 0)
{
cout << c[1]+c[2]+c[3]+c[4]+c[5]<<" "<<a[1]+a[2]+a[3]+a[4]+a[5]-e[1]-e[2]-e[3]-e[4]-e[5]<<endl;
}
}
}
}
using namespace std;
int b[10] = {0, 1, 5, 10, 50, 100};
int sp(int money, int a[10], int b[10], int c[10])
{
for (int i=5; i>0; i--)
{
if (money / b[i] < a[i])
{
c[i] = money / b[i];
money -= c[i] * b[i];
}
else
{
c[i] = a[i];
money -= c[i] * b[i];
}
}
return money;
}
int main()
{
int t, k, sum;
cin >> t;
int a[10], c[10], e[10];
while(t--)
{
sum = 0;
int money;
cin >> money;
int charge;
charge = money;
for (int i=1; i<=5; i++)
{
cin >> a[i];
sum += b[i] * a[i];
}
charge = sp(charge, a, b, c);
if (charge != 0)
{
cout << "-1" << " " << "-1" << endl;
}
else
{
k = sum - money;
k = sp(k, a, b, e);
if (k == 0)
{
cout << c[1]+c[2]+c[3]+c[4]+c[5]<<" "<<a[1]+a[2]+a[3]+a[4]+a[5]-e[1]-e[2]-e[3]-e[4]-e[5]<<endl;
}
}
}
}