课堂练习之买书打折最便宜
一、设计思路
当买书的数量超过五本的时候,想让价钱最便宜,就必须尽可能的让书可以凑成一套书,也就是可以连续成套,这样就能保证能够更多的享受打折的优惠,所以:
当买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、9 63 { 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,这样就没什么问题了