题目及要求:
书店针对《哈利波特》系列书籍进行促销活动,一共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的情况,起初考虑到买书的重复性,以为买那些书是由买主决定的,后来发现我想多了,不用考虑这种情况,为了实现最优惠,保证每次买书都没有重复的就行了。设计算法时,一定要学会用已经实现的去估计没有实现的,将新的问题转化为旧的问题。