最近在学习《 编程之美 》这本书,书中提到了很多很经典的算法问题和实现,学起来真是耗费脑细胞啊。书中的算法实现使用C编写的,这里作者自己写了一部分java的实现,如果有错误,还请各位读者批评指正。截图版权属于原作者。
github:
【 https://github.com/cstriker1407/think_in_java 】
CONTENTS
1.4买书问题
解法1实现
public class DiscountTest { public static void test() { float min = internalCalc(2, 2, 2, 1, 1); System.out.println("最小花费:" + min); } public static float internalCalc(int n1, int n2, int n3, int n4, int n5) { List<Integer> list = new LinkedList<Integer>(); list.add(n1); list.add(n2); list.add(n3); list.add(n4); list.add(n5); Collections.sort(list); n1 = list.get(4); n2 = list.get(3); n3 = list.get(2); n4 = list.get(1); n5 = list.get(0); float minCost = 8*(n1 + n2 + n3 + n4 + n5); if (n5 >= 1) { float tmp = 5*8*(1-0.25f) + internalCalc(n1-1, n2-1, n3-1, n4-1, n5-1); minCost = minCost < tmp ? minCost : tmp; } if (n4 >= 1) { float tmp = 4*8*(1-0.2f) + internalCalc(n1-1, n2-1, n3-1, n4-1, n5); minCost = minCost < tmp ? minCost : tmp; } if (n3 >= 1) { float tmp = 3*8*(1-0.10f) + internalCalc(n1-1, n2-1, n3-1, n4, n5); minCost = minCost < tmp ? minCost : tmp; } if (n2 >= 1) { float tmp = 2*8*(1-0.05f) + internalCalc(n1-1, n2-1, n3, n4, n5); minCost = minCost < tmp ? minCost : tmp; } if (n1 >= 1) { float tmp = 1*8 + internalCalc(n1-1, n2, n3, n4, n5); minCost = minCost < tmp ? minCost : tmp; } if (n1 < 1) { float tmp = 0; minCost = minCost < tmp ? minCost : tmp; } return minCost; } }
备注:
代码作者写的比较简略,也没有经过大量的测试。如有问题请联系作者,在此先感谢下。
发表评论