一、题目要求
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
n 设计算法能够计算出读者购买一批书的最低价格。
要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。
二、设计思想
首先前5本书的折扣肯定是全部直接买折扣最低。然后从第6本到第9本时价格最低为:
第六本:5加1
第七本:5加2
第八本:4加4(特殊)
第九本:5加4
所以只需要将所需要买的书除以10之后,然后将余数和这几个相比较,分为0~5,6~9两种大情况,写好分配策略。最特殊的自然是8本的时候,然后在计算价格就可以了。
三、代码实现
//哈利波特书店促销 王文奇 20132980 2016/5/31 #include<iostream> using namespace std; int main() { int num=1, rem;//数量和余数 float price;//价格 float discount[] = { 1, 1, 0.95, 0.9, 0.8, 0.75 };//折扣 while (num>0) //为0时跳出 { cout << "请输入要购买的本数(按0结束):"; cin >> num; rem = num % 10;//本数除10取余 if (rem>5) //余数大于5时 { if (rem == 8) //8本用4+4更便宜 { price = (num / 10) * 2 * 30 + 4* 8 * 0.8 * 2; cout << "整套购买" << (num / 10) * 2 << "套," << "再购买两套,每套随意选四本不同的书,共" << price << "元" << endl; } else //其他6,7,9都是5本+剩下的更便宜 { price = ((num / 10) * 2 + 1) * 30 + num % 5 * 8 * discount[num % 5]; cout << "整套购买" << (num / 10) * 2 + 1 << "套," << "再随意购买" << num % 5 << "本不同的书,共" << price << "元" << endl; } } else //余数为0,1,2,3,4,5时 { if (rem == 0 || rem == 5) //0,5直接买整套 { price = (num / 5) * 30; cout << "整套购买" << num / 5 << "套,共" << price << "元" << endl; } else //1,2,3,4就买整套,剩下的直接买 { if (num > 5) { price = (num / 5) * 30 + num % 5 * 8 * discount[num % 5]; cout << "整套购买" << num / 5 << "套," << "再随意购买" << num % 5 << "本不同的书,共" << price << "元" << endl; } else { price = num % 5 * 8 * discount[num % 5]; cout << "随意购买" << num % 5 << "本不同的书,共" << price << "元" << endl; } } } cout << endl; } return 0; }
四、实现截图
五、个人总结
其实,这次并没有想象的那么难,只要掌握了规律,一切问题就迎刃而解了。