#include <iostream> using namespace std; void LowestPrice(int n){ double lowprice = 0; int p ,q; p = n/10; q = n%10; switch(q){ case 0:lowprice = p*20;break; case 1:lowprice = p*20+8;break; case 2:lowprice = p*20+8*2*0.95;break; case 3:lowprice = p*20+8*3*0.9;break; case 4:lowprice = p*20+8*4*0.8;break; case 5:lowprice = p*20+8*5*0.75;break; case 6:lowprice = p*20+8*5*0.75+8;break; case 7:lowprice = p*20+8*5*0.75+8*2*0.95;break; case 8:lowprice = p*20+8*4*0.8*2;break; case 9:lowprice = p*20+8*5*0.75+8*4*0.8;break; } cout<<"购买"<<n<<"书的最低价格是:"<< lowprice; } void main(){ int n; cout<<"请输入想买的书的本数:"<<endl; cin>>n; LowestPrice(n); system("pause"); }
题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示: 本数 折扣 2 5% 3 10% 4 20% 5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。 设计算法能够计算出读者购买一批书的最低价格。
思路:
有题目可知,在购买的书的本数n小于10时,2-5本按照对应的折扣进行计算即可,当6<=n<=9时,要考虑如何购买可以使价钱最少。通过计算当n=6时,按照5本一套加上剩下的一本,价钱最少。当n=7时,按照5本一套加上剩下的2本价钱最少,当n=8时,按照4本一套共买两套价钱最少,当n=9时,按照5本一套加上剩下的4本价钱最少。 当在购买的书的本数n大于10时,n除以10,商p余q。整数部分即按照5本一套买2p套,剩下的q则根据上边的2-9进行计算即可
总结:
其实这个想法多亏了老师的提醒,讨论6-9使整个计算过程简单了不少然后当大于10时,采用对n除以10取余的方法,此处我采取的是除以10,而不是除以五,除以10得到的余数更明显能够看出是2-9中的那个数,是计算更加简便