1005 problem F
2016-03-17 20:27
337 查看
用最多张数bnu的钱和最少张数lnu的钱买价值sum1相同的东西
求最少张数从价值sum1中一次一张的减去小于价值的最大面额的钱直到剩余的价值sum1小于该面额 然后再一张一张的减小于现在价值sum1的最大面额的钱 直到循环到最小面额的最后一张或者价值sum1为零 如果循环结束后sum1仍然大于0 输出-1
求最多张数就是把手里的钱减去要买的东西的钱 用求最少张数的方法求出手里剩下最少张数;总张数减去手里剩下最小张数就是消耗最多的张数;
求最少张数从价值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; }
相关文章推荐
- Java中MD5加密算法的实现
- 网络基础
- seajs进阶
- gdb命令使用
- 互斥锁与条件变量及生产者-消费者问题
- SVM支持向量机
- Unity3D中基本GUI控件介绍
- 第3周项目1 经过几次猜对数字大小
- Linux_开发板通过NFS挂载到虚拟机的几个错误解决
- 记录自己安装Android Studio
- OpenStack二三事(2)
- 第二次上机实验-1
- hdu Jungle Roads(最小生成树)
- Word小技巧之:如何去掉Word文字下面的波浪线
- 2016春季练习——二次筛
- Android Studio学习之签名打包APK
- 通过nfs挂载主机目录到开发板(jz2440)
- HDOJ 1050 Moving Tables
- Eclipse-new-Class文件时Interfaces-Add-Choose interfaces里找不到GenericServlet和HttpServlet
- 夺命雷公狗---DEDECMS----9dedecms单标签