好记性不如铅笔头

java, 编程, 编程之美

《编程之美》读书笔记:买书问题

最近在学习《 编程之美 》这本书,书中提到了很多很经典的算法问题和实现,学起来真是耗费脑细胞啊。书中的算法实现使用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;
	}
}

 备注:

代码作者写的比较简略,也没有经过大量的测试。如有问题请联系作者,在此先感谢下。

发表评论

16 − 14 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据