书店售书最低价格问题

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:

                               本数                  折扣

                               2                       5%

                               3                       10%

                               4                       20%

                               5                       25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,
例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
 
1》设计思路:
首先在自己计算一下1到10本的最低价格:
其中1到5本的时候,都是按相应的折扣进行购买,就是最低价格
而6到10本就需要自己算一下了,其结果如下:
6本:5+1方案价格最低
7本:5+2方案价格最低
8本:4+4方案价格最低
9本:5+4方案价格最低
10本:5+5方案价格最低
 
所以10本以后就需要看除以5的余数就可以了,可以整除的那部分按5本折扣算,不能整除的按不能整除的有几本,就按几本折扣算,
其中当余数为3时,情况较为特殊,因为当有8本是4+4方案最优,应该是减去8本,那8本按4+4计算,其余的按5本的折扣计算
当然只有3本时,就输出3本书的情况。
 
2》源代码:
 1 import java.util.*;
 2 public class MinPrice {
 3     public  static void main(String args[]){
 4         Scanner sc =new Scanner(System.in);
 5         
 6         double money=0;//总钱数
 7         int biaoshi =1; //是否想继续的标识
 8         while(biaoshi>0)
 9         {
10             System.out.println("请输入你想购书的数量:");
11             int num = sc.nextInt();
12             
13             int yushu=num%5;
14             switch(yushu)
15             {
16                 case 0:
17                 {
18                     money=num*8*0.75;
19                     break;
20                 }
21                 case 1:
22                 {
23                     money=(num-1)*8*0.75;
24                     break;
25                 }
26                 case 2:
27                 {
28                     money=(num-2)*8*0.75+8*2*0.95;
29                     break;
30                 }
31                 case 3:
32                 {
33                     if(num==3)
34                     {
35                         money=num*8*0.9;
36                         break;
37                     }
38                     else
39                     {
40                         money=(num-8)*8*0.75+2*8*4*0.85;
41                         break;
42                     }
43                     
44                 }
45                 case 4:
46                 {
47                      money=(num-4)*8*0.75+8*4*0.8;
48                      break;
49                 }
50             }
51             System.out.println("书的最低价格为:"+money);
52             System.out.println("您是否继续,继续选1否则选0");
53             biaoshi =sc.nextInt();
54         }
55         
56     }
57 }

 

结果截图:

 

总结:要注意总结规律,还要注意找出不同于常规的那个数,这往往是正确解决问题关键

posted on 2016-05-30 16:47  那年夏天123  阅读(160)  评论(0编辑  收藏  举报

导航