我是靠谱客的博主 娇气大侠,最近开发中收集的这篇文章主要介绍买苹果问题题目:思路分析:代码展示:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

题目:

输入描述:

输出描述:

示例1

输入

输出

思路分析:

代码展示:


题目:

小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。

输入描述:

输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果

输出描述:

输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1

示例1

输入

20

输出

3

思路分析:

  1. 这个题目输入是一个数字,输出也是一个数字。非常容易联想到青草问题的解法:
    1. 暴力枚举/暴力递归 -> 输出结果 ->找出规律
  2. 暴力枚举:
    1. 用贪心算法,先看是否为偶数,若为偶数,先尝试用大袋子装
    2. 不能正好装下时,减少大袋子数量,增加小袋子数量。
    3. 如果怎么都不能装下,则输出-1
  3. 输出结果并找出规律:
    1. 前17个毫无规律

18~25有点规律。要么3要么-1,一共六个

25以后,规律很明显,要么i要么-1,八个一轮回

代码展示:

import java.io.*;
import java.util.*;

public class Main{
    private static final boolean DEBUG = false;
    
    public static int getBagNumber(int n){//暴力解法
        if(n<0 || n%2==1){
            return -1;
        }
        int factor = n/8;
        while(factor>=0){
            int left = n - factor * 8;
            if(left%6 == 0){
                return factor + left/6;
            }
            factor--;
        }
        return -1;
    }
    
    public static int getByRegular(int n){//找规律
        if(n<0 || n%2==1){
            return -1;
        }
        if(n<=24){
            if(n==6 || n==8)return 1;
            if(n==14 || n==16)return 2;
            if(n==20 || n==22 || n==24)return 3;
        }else{
            return (n-25)/8+4;
        }
        return -1;
    }
    
    public static void main(String[] args)throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        System.out.print(getByRegular(n));
        
        if(DEBUG){
            for(int i=1;i<101;i++){
                System.out.println(getBagNumber(i)+" ");
            }
        }
        
    }
}

最后

以上就是娇气大侠为你收集整理的买苹果问题题目:思路分析:代码展示:的全部内容,希望文章能够帮你解决买苹果问题题目:思路分析:代码展示:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部