课堂练习-求出最优方案,找到最优化费

Posted on 2016-05-30 16:05  Young丶  阅读(224)  评论(0)    收藏  举报

一、题目要求

   书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
                               本数                  折扣
                                   2                       5%
                                   3                       10%
                                   4                       20%
                                   5                       25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。

二、设计思路

    初看题目,会觉得题目解决很简单,按5的余数及商求解即可,但是,当我们往后依次列出最低价格,发现当麦8本时,最优解并不是5+3,而是4+4,这时题目就没有那么简单了。

   我们按10的余数及商求解,便可以将所有的情况算出最优解。

三、代码

 1 //找最优折扣
 2 
 3 import java.util.Scanner;
 4 public class KT_530 {
 5 
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         
 9         Scanner in=new Scanner(System.in);
10         
11         int n;//购买书籍数量
12         System.out.print("输入购买书的数量:");
13         n=in.nextInt();
14         
15         double money;//花费
16         money=FindMin(n);
17         
18         //输出
19         System.out.print("买"+n+"本书的最优花费为:"+money+"元。");
20 
21     }
22     
23     static double FindMin(int n)
24     {
25         double money=0;
26         
27         int shang=0,yushu=0;
28         shang=n/10;
29         yushu=n%10;
30         
31         money=shang*8*5*2*0.75;
32         
33         if(yushu==0)
34         {
35             
36         }
37         if(yushu==1)
38         {
39             money+=8;
40         }
41         if(yushu==2)
42         {
43             money+=8*2*0.95;
44         }
45         if(yushu==3)
46         {
47             money+=8*3*0.9;
48         }
49         if(yushu==4)
50         {
51             money+=8*4*0.8;
52         }
53         if(yushu==5)
54         {
55             money+=8*5*0.75;
56         }
57         if(yushu==6)
58         {
59             money+=8*5*0.75;
60             money+=8*1;
61         }
62         if(yushu==7)
63         {
64             money+=8*5*0.75;
65             money+=8*2*0.95;
66         }
67         if(yushu==8)
68         {
69             money+=8*4*2*0.8;
70         }
71         if(yushu==9)
72         {
73             money+=8*5*0.75;
74             money+=8*4*0.8;
75         }
76         return money;
77     }
78 
79 }

四、截图