设计算法能够计算出读者购买一批书的最低价格

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

二、解题思路:

通过对6本书、7本书、8本书、9本书的分析得到当本数为6、7、9时,最便宜的组合为5+1,5+2,5+4,当本数为8时,最便宜的组合为4+4,因此当本数为13,23,33等时都要分出一个8来才会最便宜,因此首先分为两种情况:本数除以五是余数为3和本数除以五是余数为3以外的数。余数为三时,判断本数除以5的整数商及(本数/5),如果为0,则本数乘以0.9,如果不为0,则商减一,余数加5计算;余数为其他,按商是几,余数是几计算。

三、源代码:

package shopp;

import java.util.*;

public class main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        int N=0;
        int n=0;
        int m=0;
        Scanner S=new Scanner(System.in);
        System.out.print("请输入你要购买的书的本数:");
        N=S.nextInt();
        if(N%5==3)
        {
            n=N/5;
            m=N%5;
            if(n==0)
            {
                System.out.println("读者购买一批书的最低价格为:"+(3*8*0.9));
            }
            else
            {
                System.out.println("读者购买一批书的最低价格为:"+((n-1)*5*8*0.75+2*4*8*0.8));
            }
        }
        else
        {
            n=N/5;
            m=N%5;
            switch(m)
            {
               case 0:System.out.println("读者购买一批书的最低价格为:"+(n*5*8*0.75));break;
               case 1:System.out.println("读者购买一批书的最低价格为:"+(n*5*8*0.75+8));break;
               case 2:System.out.println("读者购买一批书的最低价格为:"+(n*5*8*0.75+m*8*0.95));break;
               case 4:System.out.println("读者购买一批书的最低价格为:"+(n*5*8*0.75+m*8*0.9));break;
               case 5:System.out.println("读者购买一批书的最低价格为:"+(n*5*8*0.75+m*8*0.75));break;
            }
        }
    }
}

四、程序运行截图:

五、个人总结

    这次实验总体感觉较好,没有出现太多的问题,主要是在使用switch语句时,忘记了加break。

posted @ 2015-05-11 20:06  风雨同行  阅读(321)  评论(1编辑  收藏  举报