F

来源:互联网 发布:知乎jennyyy照片 编辑:程序博客网 时间:2024/04/29 01:47

题意:求最多和最少,需要的零钱数


思路:求最多的就是从大的找,找最少的,就是找出花的最多,然后做减法


#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;
              }
         }
     }
 }


0 0