一、题目:
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。