购买一批书的最低价格

问题:

  书店针对《哈利波特》系列书籍进行促销活动,一共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本书时的价格:

原文地址:https://www.cnblogs.com/apan008/p/5580423.html