用折后最低价买书
一、程序要求
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
二、程序设计思想
列举出买十本书以内的所有情况,从中找规律:买一本的时候不打折扣,价钱为 8;买两本的时候买最低价为 15.2(1+1);买三本的时候最低价为 21.6(1+1+1);买四本的时候最低价为25.6(1+1+1+1);买五本的时候最低价为30(1+1+1+1+1);买六本的时候最低价为 38(5+1);买七本的时候最低价为 45.2(5+1+1);买八本的时候最低价为 51.2(4+4);买九本的时候最低价为 55.6(5+4);买十本的时候最低价为 60(5+5)。按照上面的情况可以看出:购买8本书时,最低价并不是(5+3),所以每10本书是一个循环。书的总数除以10求余求商:余数部分按10本以内数目计算;商数部分按整套购买计算。按此类推,算出最低价。
三、源程序
//李俏 2016,6,2 //根据折扣,计算买书的最低价 #include<iostream> using namespace std; int main() { int num;//书的数量 double money;//折后的钱数 int i, j; cout << "请输入要买的书的数量:"; cin >> num; while (num <= 0) { //exit(1); cout << "请重新输入要买的书的数量(数量必须为正数):"; cin >> num; } i = num % 10; j = num / 10; switch (i) { case 0: money = j * 40 * 0.75*2 ; break; case 1: money = j * 40 * 0.75 * 2 + 8; break; case 2: money = j * 40 * 0.75 * 2 + 8 * 2 * 0.95; break; case 3: money = j * 40 * 0.75 * 2 + 8 * 3 * 0.9; break; case 4: money = j * 40 * 0.75 * 2 + 8 * 4 * 0.8; break; case 5: money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75; break; case 6: money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75 + 8; break; case 7: money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75 + 8 * 2 * 0.95; break; case 8: money = j * 40 * 0.75 * 2 + 8 * 4 * 0.8 * 2; break; case 9: money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75 + 8 * 4 * 0.8; break; } cout << "这批书的折后价为:"<<money<<endl; return 0; }
四、结果截图
五、心得体会
课堂上,老师引导我们:根据题设,列举各种情况并且计算各种可能的结果,经过比较得到最低价;再然后从购买10以内数量的书、得到的每个最低价中,找规律,但是由于自己的不自信、计算的结果不正确,没能找到规律;最后,老师给出了思路——书的总数超过10本时,也可按10本以内的计算方法计算,并且指出购买8本书是一个特殊情况。
就实现来讲,相比前两次的课堂练习,这次的还是比较简单的,关键在于解题的思路和从中发现的规律。这次练习实现后,内心还有点儿小激动,因为题目不太复杂,可以把自己的理解以程序的形式呈现出来,但是激动之余,还是有些担心,担心能力不能提高、以后遇到问题还是解决不了。通过本次实验,我复习了一些常用的基础语法点,以后会更加熟练的。