软件工程课堂练习——求买书最低价格

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

一、设计思想
1、若购买的图书不超过5本,那么分一次购买且购买不同的书籍最便宜。
2、若购买的图书本书大于5本,少于10本,我将买6,7,8,9本书的情况都列举出来,发现:
买6本:分两次购买,5本1本最便宜
买7本:分两次购买,5本2本最便宜
买8本:分两次购买,4本4本最便宜
买9本:分两次购买,5本4本最便宜
3、当购买的图书大于10本时,由于买5本时折扣最高,所以用购买数量模5,余数+5就会对应6,7,8,9本的情况,买(商-1)次5本,这样可是价格最低。

二、源程序

package com.java.lianxi;

import java.util.Scanner;

public class lianxi5 
{
    public static void main(String[] args)
    {
        System.out.print("请输入购买图书的数量:(大于10)");
        Scanner in=new Scanner(System.in);
        int count=in.nextInt();
        double sum = 0;
        double array[]={38,45.2,51.2,55.6};
        if(count>10)
        {
            sum=(count/5-1)*40*0.75+array[count%5-1];
        }
        else
        {
            System.out.print("请重新输入购买数量:(大于10)");
            count=in.nextInt();
            sum=(count/5-1)*40*0.75+array[count%5-1];
        }
        System.out.print("最低价格为:"+sum);
        
    }

}

三、结果截图

四、心得体会

  刚刚拿到这道题目,老师就给了部分思路,于是我就顺着老师的思路想,由于买5本时折扣最大,买5本以下,一次性全部购买最便宜,买6-9本,我列举出了各个情况,选出了最低价格的情况,10以上可以分解成几个5本和6,7,8,9的情况,起初考虑到买书的重复性,以为买那些书是由买主决定的,后来发现我想多了,不用考虑这种情况,为了实现最优惠,保证每次买书都没有重复的就行了。设计算法时,一定要学会用已经实现的去估计没有实现的,将新的问题转化为旧的问题。

posted on 2015-04-15 13:24  王雪青  阅读(164)  评论(0编辑  收藏  举报