优惠购书

1.题目:

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元,具体折扣如下所示:

本数        折扣

2             5%

3             10%

4              20%

5             25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
2.设计思路
刚开始看到这个题目时,感觉挺难的,感觉有好多种情况,后来仔细阅读题目后,跟同学讨论分析后,发现这个题目其实就是将数字分解,知道这么回事后,就开始分析每一个数,分析过程中发现其实小于5的数字不用分析,只需要分析6-9的数字就行,之后的数都会循环。针对6-9之间的数字进行分析,将各种情况进行计算,最终得到结论:
6=5+1
7=5+2
8=4+4
9=5+4
这样就会扩大到一般情况。
3.源代码
#include<iostream>
using namespace std;

double mSum(int n)
{
    int m = 0;
    double money;
    m = n % 5;
    m = m + 5;
    switch (m)
    {

    case 5:
        money = n * 8 * 0.75;
        break;
    case 6:
        money = (n - 1) * 8 * 0.75 + 8;
        break;
    case 7:
        money = (n - 2) * 8 * 0.75 + 8 * 2 * 0.95;
        break;
    case 8:
        money = (n - 8) * 8 * 0.75 + 4 * 8 * 0.8 * 2;
        break;
    case 9:
        money = (n - 4) * 8 * 0.75 + 8 * 4 * 0.8;
        break;
    }
    return money;
}
int main()
{
    int n;
    cout << "请输入购买数量:" << endl;
    cin >> n;
    cout << endl;
    cout << "最优惠总书价:" << mSum(n) << "" << endl;
}
4.程序截图




5.总结
要学会把实际问题抽象出来,将实际问题转化为比较容易懂的模型。对于感觉比较复杂的程序,要注意分析情况的特殊性,先分析比较少的数,由特殊到一般,从而找出规律,这样程序就会简单许多。

原文地址:https://www.cnblogs.com/gting/p/4488914.html