您的位置:首页 > 其它

1005 problem F

2016-03-17 20:27 337 查看
用最多张数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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: