课堂练习之买书打折最便宜

一、设计思路

  当买书的数量超过五本的时候,想让价钱最便宜,就必须尽可能的让书可以凑成一套书,也就是可以连续成套,这样就能保证能够更多的享受打折的优惠,所以:

当买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,这样就没什么问题了

转载于:https://www.cnblogs.com/KevinBin/p/4428875.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值