课堂练习---最低价格买书

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。

思路:首先算出1到10本的最低价格,

1本 8元

2本 15.2元 按照两本的折扣 (和上一个阶段差7.2元)

3本 21.6元 按照三本折扣 不能按照2 1分 (和上一个阶段差6.4元)

4本 25.6元 按照4本折扣(和上一个阶段差4元)

5本 30元 按照5本折扣 (和上一个阶段差4.4元)

6本 38元 按照5+1本 最优

7本 45.2元 按照4+3本 最优

8本 51.2元 按照4+4本 最优

9本 55.6元 5+4本 最优

10本 60元 5+5本 最优

发现:首先在纸上从1开始计算找规律,发现当这个数依次减5后出现8时,买2套4卷不一样的书时价格是最便宜的,其他情况下都是买5卷不一样的,然后剩下小于5本的就按照折扣价格购买。

源代码:

#include <iostream>
using namespace std;
void main()
{
    int n;  //书的本数
    int a = 0, b = 0; //a为当本数大于5的时候,表示有几个5,则计算几倍的5本价钱。b表示剩余的不足5本的价格。
    double sum;  //sum表示总价格
    cout << "请输入要买的书的本数:" << endl;
    cin >> n;

    a = n / 5;
    b = n % 5;

    if(n == 3)
        sum = 3 * 8 * (1 - 0.1);
    else
    {
        if(b == 0)
            sum = a * 5 * 8 * (1 - 0.25);
        if(b == 1)
            sum = a * 5 * 8 * (1 - 0.25) + 8;
        if(b == 2)
            sum = a * 5 * 8 * (1 - 0.25) + 2 * 8 * (1 - 0.05);
        if(b == 3)
            sum = (n - 8) / 5 * 5 * 8 * (1 - 0.25) + 4 * 2 * 8 * (1 - 0.2);
        if(b == 4)
            sum = a * 5 * 8 * (1 - 0.25) + 4 * 8 * (1 - 0.2);
    }
    cout << "总价格为:" << sum << "元。" << endl;
}

总结:题本身很简单,只要从第一本开始列出来,找出其中的规律,程序思路很容易就出来了。

原文地址:https://www.cnblogs.com/diyunfei/p/5561065.html