问题描述
试题编号: | 201709-1 |
试题名称: | 打酱油 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。 输入格式 输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。 输出格式 输出一个整数,表示小明最多可以得到多少瓶酱油。 样例输入 40 样例输出 5 样例说明 把40元分成30元和10元,分别买3瓶和1瓶,其中3瓶送1瓶,共得到5瓶。 样例输入 80 样例输出 11 样例说明 把80元分成30元和50元,分别买3瓶和5瓶,其中3瓶送1瓶,5瓶送2瓶,共得到11瓶。 |
对自己的吐槽:这是CCF的一道题,为什么要记录下这道题呢?唉,这道题算是自己的一道痛处吧。当时解这道题,费了很长的时间,最后还没解对。浅了说自己想的太复杂,实际上就是自己太菜了。。。
先看下,自己写的代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int max = -999;
for(int i=0;i<=N/10;i++){
for(int j=0;j<=N/30;j++){
for(int k=0;k<=N/50;k++){
if(i*10+j*30+k*50 == N){
if(max<i+j*4+k*7)
max = i+j*4+k*7;
}
}
}
}
System.out.println(max);
}
}
三层循环,我的这种做法是比较保守的,所有的情况都考虑到了,幸亏给出的样例比较小,不然的话,绝对超时。
交上去之后,我顺便百度了一下这道题目,看了一下别人的代码,觉得也都差不多,但是别人的比较简单。这就是差距~~~
其实这个题目也算是一个简单的贪心算法:五十优先考虑,其次三十,最后是十。(可以通过列数据比较)
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int numOffive = N/50;
int numOfthree = (N-50*numOffive)/30;
int numOfone = (N-50*numOffive-30*numOfthree)/10;
System.out.println(7*numOffive+4*numOfthree+numOfone);
}
}