购买一批书的最低价格
问题:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 | 折扣 |
2 | 5% |
3 | 10% |
4 | 20% |
5 | 25% |
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
设计思想:经过找规律,每十本书为一个价格循环周期,唯一出现变化的地方是在买第八本的时候规律与之前的不一样,买两个四本书,比买一个五本书外加三本书的总体折扣大。所以我们以十本书为一个周期来做这道题。
代码如下:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i, m, n; 6 double s = 0; 7 cout << "请输入想要购买书的数量:"; 8 cin >> i; 9 while (i <= 0) 10 { 11 cout << "输入的数不正确,请输入正整数" << endl; 12 cin >> i; 13 } 14 m = i / 10;//求整 15 n = i % 10;//求余 16 if (n == 0) 17 { 18 s = 60 * m;//10的整数倍 19 } 20 if (n == 1) 21 { 22 s = 60 * m + 8;//买10n+1本书的价格 23 24 } 25 26 if (n == 2) //买10n+2本书的价格 27 { 28 s = 60 * m + 2 * 8 * 0.95; 29 } 30 if (n == 3) //买10n+3本书的价格 31 { 32 s = 60 * m + 3 * 8 * 0.90; 33 34 } 35 if (n == 4) //买10n+4本书的价格 36 { 37 s = 60 * m + 4 * 8 * 0.8; 38 } 39 if (n == 5) //买10n+5本书的价格 40 { 41 s = 60 * m + 5 * 8 * 0.75; 42 } 43 if (n == 6) //买10n+6本书的价格 44 { 45 s = 60 * m + 30 + 8; 46 } 47 if (n == 7) //买10n+7本书的价格 48 { 49 s = 60 * m + 30 + 2 * 8 * 0.95; 50 } 51 if (n == 8) //买10n+8本书的价格 52 { 53 s = 60 * m + 2 * 4 * 8 * 0.8; 54 } 55 if (n == 9) //买10n+9本书的价格 56 { 57 s = 60 * m + 30 + 4 * 8 * 0.8; 58 } 59 cout << "买" << i << "本书,花费的最低价钱为:" << s <<endl; 60 return 0; 61 }
测试结果:
测试数据分别为当买 -5本书时,和买五本书时的价格
测试数据为当买17本书时的价格: