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


    书店针对《哈利波特》系列书籍进行促销活动,一共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;
    }

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

  • 相关阅读:
    突然想到一个问题:有关 cqrs 分离
    Oracle 12C 数据库安装与配置
    Android 绑定服务的作用 (参考,不确定他说的是不是对的)
    SSM框架整合(一)
    常见数据库优化方案(九)
    大量文件存储
    MyBatis 参数传递小知识(划重点)|划掉 MyBatis 常见小debug
    MyBatis 自动代码生成器
    常见数据库优化方案(八)
    常用数据库优化方案(五)
  • 原文地址:https://www.cnblogs.com/diyunfei/p/5561065.html
Copyright © 2020-2023  润新知