1005 problem F

来源:互联网 发布:windows无法正常启动 编辑:程序博客网 时间:2024/06/04 08:27

用最多张数bnu的钱和最少张数lnu的钱买价值sum1相同的东西
求最少张数从价值sum1中一次一张的减去小于价值的最大面额的钱直到剩余的价值sum1小于该面额 然后再一张一张的减小于现在价值sum1的最大面额的钱 直到循环到最小面额的最后一张或者价值sum1为零 如果循环结束后sum1仍然大于0 输出-1
求最多张数就是把手里的钱减去要买的东西的钱 用求最少张数的方法求出手里剩下最少张数;总张数减去手里剩下最小张数就是消耗最多的张数;

// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。////#include "stdafx.h"#include<iostream>#include<fstream>//#include<map>using namespace std;int a[5];int b[5] = { 1,5,10,50,100 };int main(){    //fstream cin("E:/C++/IN/aaa.txt");    int n;    cin >> n;    while (n--)    {        int lnu = 0, bnu = 0;        int sum1, sum2;        cin >> sum1;        sum2 = sum1;        for (int i = 0;i<5;i++)        {            cin >> a[i];        }        for (int j = 4;j >= 0;j--)            for (int i = 0;i<a[j];i++)            {                if (sum1 - b[j] >= 0)                {                    sum1 -= b[j];                    lnu++;                }            }        if (sum1>0) cout << "-1 ";        else            cout << lnu << " ";        int sum = 0;        for (int i = 0;i < 5;i++) sum += b[i]*a[i];        sum2 = sum - sum2;        if(sum2<0)cout<<"-1"<<endl;        else{        int sum3 = 0;        for (int i = 0;i < 5;i++)sum3 += a[i];        for (int j = 4;j >= 0;j--)            for (int i = 0;i<a[j];i++)            {                if (sum2 - b[j] >= 0)                {                    sum2 -= b[j];                    bnu++;                }            }        if (sum2>0) cout << "-1"<<endl;        else            cout <<sum3- bnu <<endl;}    }    return 0;}
0 0
原创粉丝点击