• 哈利波特书店促销


    一、题目要求    

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

                                   本数                  折扣

                                       2                       5%

                                       3                       10%

                                       4                       20%

                                       5                       25%

          根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。

    设计算法能够计算出读者购买一批书的最低价格。

    要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。

    二、设计思想

     首先前5本书的折扣肯定是全部直接买折扣最低。然后从第6本到第9本时价格最低为:

      第六本:5加1

      第七本:5加2

      第八本:4加4(特殊)

      第九本:5加4

    所以只需要将所需要买的书除以10之后,然后将余数和这几个相比较,分为0~5,6~9两种大情况,写好分配策略。最特殊的自然是8本的时候,然后在计算价格就可以了。

    三、代码实现

    //哈利波特书店促销 王文奇 20132980 2016/5/31
    #include<iostream>
    using namespace std;
    
    int main()
    {
        int num=1, rem;//数量和余数
        float price;//价格
        float discount[] = { 1, 1, 0.95, 0.9, 0.8, 0.75 };//折扣
        
        while (num>0)  //为0时跳出
        {
            cout << "请输入要购买的本数(按0结束):";
            cin >> num;
            rem = num % 10;//本数除10取余
            if (rem>5)  //余数大于5时
            {
                if (rem == 8)  //8本用4+4更便宜
                {
                    price = (num / 10) * 2 * 30 + 4* 8 * 0.8 * 2;
                    cout << "整套购买" << (num / 10) * 2 << "套," << "再购买两套,每套随意选四本不同的书,共" << price << "" << endl;
                }
                else  //其他6,7,9都是5本+剩下的更便宜
                {
                    price = ((num / 10) * 2 + 1) * 30 + num % 5 * 8 * discount[num % 5];
                    cout << "整套购买" << (num / 10) * 2 + 1 << "套," << "再随意购买" << num % 5 << "本不同的书,共" << price << "" << endl;
                }
    
            }
            else  //余数为0,1,2,3,4,5时
            {
                if (rem == 0 || rem == 5)  //0,5直接买整套
                {
                    price = (num / 5) * 30;
                    cout << "整套购买" << num / 5 << "套,共" << price << "" << endl;
                }
                else  //1,2,3,4就买整套,剩下的直接买
                {
                    if (num > 5)
                    {
                        price = (num / 5) * 30 + num % 5 * 8 * discount[num % 5];
                        cout << "整套购买" << num / 5 << "套," << "再随意购买" << num % 5 << "本不同的书,共" << price << "" << endl;
                    }
                    else
                    {
                        price = num % 5 * 8 * discount[num % 5];
                        cout << "随意购买" << num % 5 << "本不同的书,共" << price << "" << endl;
                    }
                }
            }
    
            cout << endl;
        }
        
    
        return 0;
    }

    四、实现截图

    五、个人总结

          其实,这次并没有想象的那么难,只要掌握了规律,一切问题就迎刃而解了。

  • 相关阅读:
    清空
    从一个例子看现代C++的威力
    C++11实现一个自动注册的工厂
    REST RPC架构思想
    thinking in object pool
    worksteal thread pool
    check member function
    C# string 常用功能的方法扩展
    C#设计模式总结
    JAVA过滤器和拦截器的区别
  • 原文地址:https://www.cnblogs.com/qwer111/p/5545083.html
Copyright © 2020-2023  润新知