网易2017 买苹果
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。
输入描述:
输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果
输出描述:
输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1
输入例子:
20
输出例子:
3
广度优先即可完成,没啥难度
import java.util.Scanner; import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) {//注意while处理多个case int M = in.nextInt(); Node node = new Node(); node.val=0; node.level=0; Queue<Node> queue = new LinkedList<Node>(); queue.offer(node); while(!queue.isEmpty()){ Node current=queue.poll(); if (current.val+6 <= M){ Node tmp = new Node(); tmp.level = current.level+1; tmp.val = current.val + 6; if(tmp.val == M){ System.out.println(tmp.level); break; } queue.offer(tmp); } if (current.val+8 <=M){ Node tmp = new Node(); tmp.level = current.level+1; tmp.val = current.val + 8; if(tmp.val == M){ System.out.println(tmp.level); break; } queue.offer(tmp); } if(queue.isEmpty()){ System.out.println(-1); } } } } static class Node{ public int val; public int level; } }