概述
目录
题目:
输入描述:
输出描述:
示例1
输入
输出
思路分析:
代码展示:
题目:
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。
输入描述:
输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果
输出描述:
输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1
示例1
输入
20
输出
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)+" ");
}
}
}
}
最后
以上就是娇气大侠为你收集整理的买苹果问题题目:思路分析:代码展示:的全部内容,希望文章能够帮你解决买苹果问题题目:思路分析:代码展示:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复