一、问题描述
n书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,
单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,
例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
二、 解决思想
首先,根据输入的课本的数目n来判断该用什么购买方案。且可知,在n>10的情况下,p = n/10,q = n%10,
p组5本的书可享受最高的优惠,再根据计算得出q从0~9的最佳的解决方案,即可算出最高的优惠。
三、代码
// harry.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #define M 8 int main(int argc, char* argv[]) { int num; int p,q; float Money; printf("请输入要买的书的本书:"); scanf("%d",&num); p = num/10; q = num%10; switch(q) { case 0: Money = 2*p*M*0.75*5; printf("最低价钱%.2f ",Money); break; case 1: Money = 2*p*M*0.75*5+M; printf("最低价钱%.2f ",Money); break; case 2: Money = 2*p*M*0.75*5+p*M*0.95; printf("最低价钱%.2f ",Money); break; case 3: Money = 2*p*M*0.75*5+p*M*0.9; printf("最低价钱%.2f ",Money); break; case 4: Money = 2*p*M*0.75*5+p*M*0.8; printf("最低价钱%.2f ",Money); break; case 5: Money = 2*p*M*0.75*5+p*M*0.75; printf("最低价钱%.2f ",Money); break; case 6: Money = (2*p+1)*M*5*0.75+M; printf("最低价钱%.2f ",Money); break; case 7: Money = (2*p+1)*M*5*0.75+2*M*0.95; printf("最低价钱%.2f ",Money); break; case 8: Money = 2*p*M*5*0.75+4*M*0.8*2; printf("最低价钱%.2f ",Money); break; case 9: Money = (2*p+1)*M*5*0.75+4*M*0.8; printf("最低价钱%.2f ",Money); break; default: printf("error! "); } return 0; }
四、运行结果
五、总结
在本次的实现过程总,首先对于输入的书的数量加以分析(如解决思想中所述),对于p,只需将其根据折扣,然后计算得知,
而对于q则不同,当q∈(1,5)时,可根据相应的折扣予以计算输出,当q∈(6,9)时,初q = 8时分成4本的两组,其他的均由
一个5本和q-5本组成,这样可使折扣达到最大。在输出时,根据价格的通常表示方法,定义一个float型的Money,然后输出小数点后
的两位即可。其方法为printf(“%.2f”,Money);。