打酱油--CCF

问题描述

试题编号: 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);
    }
}

猜你喜欢

转载自blog.csdn.net/yong_zi/article/details/81546121