一、设计思路
当买书的数量超过五本的时候,想让价钱最便宜,就必须尽可能的让书可以凑成一套书,也就是可以连续成套,这样就能保证能够更多的享受打折的优惠,所以:
当买6本书时,选择的购买方式是:五本一套,另加一单本,5+1;
当买7本书时,选择的购买方式是:5+2;
当买8本书时,选择的购买方式是:4+4;
当买9本书时,选择的购买方式是:5+4;
当超过10本书,就可以借助上面的方法,以此类推。
二、程序代码
1 import java.util.*; 2 class Bargain 3 { 4 public static void main(String[] args) 5 { 6 double sum = 0; 7 System.out.println("请输入您要购买的本数:"); 8 Scanner sc = new Scanner(System.in); 9 int num = sc.nextInt();10 11 if(num<=5)//购买书的本数不超过五本12 {13 switch(num)14 {15 case 1:16 sum=8;//不打折17 break;18 case 2:19 sum=2*8*0.95;//95折20 break;21 case 3:22 sum=3*8*0.9;//9折23 break;24 case 4:25 sum=4*8*0.8; //8折26 break;27 case 5:28 sum=5*8*0.75; //75折29 break;30 }31 }32 if(num>5&&num<=9)33 {34 sum=method(num); 35 }36 if(num>=10) //买的书本数超过10本 37 {38 switch(num%5)39 {40 case 0:41 sum=(num/5)*8*5*0.75;42 break;43 case 1:44 sum=(num/5-1)*8*5*0.75+method(6);45 break;46 case 2:47 sum=(num/5-1)*8*5*0.75+method(7);48 break;49 case 3:50 sum=(num/5-1)*8*5*0.75+method(8);51 break;52 case 4:53 sum=(num/5-1)*8*5*0.75+method(9);54 break;55 }56 }57 58 System.out.println("最便宜的价钱为:"+sum+"元");59 }60 61 62 public static double method(int a)//买书的本数为6、7、8、963 { 64 double min = 0;65 int temp = a%5;66 switch(temp)67 {68 case 1:69 min=5*8*0.75+8;70 break;71 case 2:72 min=5*8*0.75+2*8*0.95;73 break;74 case 3:75 min=4*8*0.8+4*8*0.8;76 break;77 case 4:78 min=5*8*0.75+4*8*0.8;79 break; 80 }81 return min; 82 }83 }
三、结果截图
四、新特体会
在想这个思路的时候,一开始把这个想的很复杂,以为需要考虑确定本书后,还要确定买书的种类,但是试验了几个后,发现完全没有必要这样考虑,可以直接考虑尽可能的让买的书能凑成一套书,这样自然的就可以得到最低的价钱,但是当模5取余为8的情况下,是比较特殊的,最后两种还是要分成4+4,这样就没什么问题了