展开全部
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Test {
static List fruitList = new ArrayList<>();
static Map buyList = new HashMap<>();
static List> solutions = new ArrayList<>();
static void initList() {
e5a48de588b662616964757a686964616f31333365653765fruitList.add(new Fruit("苹果", 59));
fruitList.add(new Fruit("banana", 32));
fruitList.add(new Fruit("椰子", 155));
fruitList.add(new Fruit("葡萄柚", 128));
fruitList.add(new Fruit("菠萝蜜", 1100));
fruitList.add(new Fruit("kiwi", 41));
fruitList.add(new Fruit("lemon", 70));
fruitList.add(new Fruit("mango", 97));
fruitList.add(new Fruit("橙色", 73));
fruitList.add(new Fruit("papaya", 254));
fruitList.add(new Fruit("梨", 37));
fruitList.add(new Fruit("菠萝", 399));
fruitList.add(new Fruit("西瓜", 500));
Collections.sort(fruitList);
}
public static void main(String[] args) {
initList();
Scanner sc = new Scanner(System.in);
System.out.print("输入美元金额:");
int money = sc.nextInt();
buy(money, 0);
if (solutions.isEmpty()) {
System.out.println("没有刚好消费" + money + "美元的组合方式");
} else {
int i = 1;
for (Map solution : solutions) {
System.out.print("第" + i + "种方式:");
for (Map.Entry fruit : solution.entrySet()) {
System.out.print(fruit.getKey() + fruit.getValue() + "个 ");
}
System.out.println();
i++;
}
}
sc.close();
}
static void buy(int money, int from) {
if (money == 0) {
Map solution = new HashMap<>();
for(Map.Entry fruit : buyList.entrySet()) {
solution.put(fruit.getKey(), fruit.getValue());
}
solutions.add(solution);
return;
}
for (int i = from; i
Fruit fruit = fruitList.get(i);
if (fruit.price <= money) {
addToList(fruit.name);
buy(money - fruit.price, from);
reduceFromList(fruit.name);
from++;
} else {
break;
}
}
}
static void addToList(String fruit) {
int amount = 1;
if (buyList.containsKey(fruit)) {
amount = buyList.get(fruit) + 1;
}
buyList.put(fruit, amount);
}
static void reduceFromList(String fruit) {
Integer amount = buyList.get(fruit);
if (amount != null) {
if (amount == 1) {
buyList.remove(fruit);
} else {
buyList.put(fruit, amount - 1);
}
}
}
}
class Fruit implements Comparable {
public String name;
public int price;
public Fruit(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public int compareTo(Fruit o) {
return this.price - o.price;
}
}