zoukankan      html  css  js  c++  java
  • 软件工程个人项目——买书的最低价格

    软件工程个人项目——买书的最低价格

    题目要求:

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

                                      本数                  折扣

                                       2                       5%

                                       3                       10%

                                       4                       20%

                                       5                       25%

    根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
    设计算法能够计算出读者购买一批书的最低价格。

    一、设计思想
           本题采用的是找规律的方法,经过计算会发现,购买的数量在5以内的时候没什么问题,都是按照成套的购买打折的。但是从6开始就会出现多种组合方式,我们就逐一进行计算,发现10以内只有8是特殊的。她不是购买5的倍数最便宜,而是采用4+4的方式最便宜。所以我们先按照5的倍数记录折扣率方便以后的计算,然后再把购买情况按照10分类。单独讨论余数为8的情况:8按照4+4的方式购买,其余按照5的倍数成套购买。余数不为8的情况都以5的多少倍成套购买,剩下的单独购买。
    二、代码实现
     
     1 //求买书的最低价格 2016/6/3 Zhao Ziyin
     2 #include<iostream>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int num = 0, s, b;
     8     int multi, remain;
     9     double p_price = 8;//单价为8
    10     double rate, low_price;
    11 
    12     //输入
    13     cout << "输入买书的数量:";
    14     cin >> num;
    15     while (num < 1)
    16     {
    17         cout << "输入的数量有误!"<<endl;
    18         cout << "输入买书的数量:";
    19         cin >> num;
    20     }
    21 
    22     multi = num / 10;//除以10的商
    23     remain = num % 10;//余数
    24     s = num % 5;//除以5的余数
    25     b = num / 5;//
    26     switch (s)//根据数量是5的几倍求折扣率rate
    27     {
    28     case 0: rate = 0.75; break;
    29     case 1: rate = 1; break;
    30     case 2: rate = 0.95; break;
    31     case 3: rate = 0.9; break;
    32     case 4: rate = 0.8; break;
    33     }
    34     if (remain == 8)//8是特例,是4+4的形式
    35     {
    36         low_price = (multi * 10 * p_price * 0.75) + (2 * 4 * p_price * 0.8);
    37     }
    38     else
    39     {
    40         low_price = (b * 5 * p_price * 0.75) + (s * p_price * rate);
    41     }
    42     cout << "您购买这些书的最低价格为:" << low_price << endl;
    43 
    44     return 0;     
    45 }
    三、实现截图
     输入错误处理:
    输入10以内:
    特殊以8为基准的数:
    其他情况:
             
    四、个人总结
           本次实验并不难,但是开始时候我们还是没有什么思路,老师提醒我们把情况都列举出来找规律。我以后要学习这种编程的方法。
           还有就是代码的简略问题,开始的时候我用switch语句编写从余数为0到5的情况,写到6的时候我发现这些的情况都是相通的,无非是5的倍数不同、剩余单独购买的本数不同、折扣率不同,只有余数为8的时候不是以5为基准写的。所以我修改了代码,只是用if……else写出了余数是否为8,然后把情况合在一起写,这样减少了很多代码冗余,然后我看代码的时候也能比较清晰。
           最后就是要注意一些编程的细节,,貌似最近都在用java写安卓,swich语句开始居然忘记了写break!然后定义int类型的变量习惯了把这次的low_price等价格最开始也定义成了int……下次要细心啊……
  • 相关阅读:
    Codeforces 831 A Unimodal Array 模拟(我感觉我现在比任何时候都理解程序员就是专门写各种Bug这句话)
    HDU 1205 吃糖果 鸽巢原理
    UVA 12716 GCDXOR 数论
    HDU 6152 Friend-Graph Ramsey定理 组合数学
    UVA 10791 Minimum Sum LCM 数论
    DFS系列 POJ(自认为的讲解)
    HDU 5101
    gets,gets_s,fgets函数
    vector理解一波~~~
    BestCoder Round #74 (div.1) 1002Shortest Path(hdoj5636)
  • 原文地址:https://www.cnblogs.com/2016helen/p/5560262.html
Copyright © 2011-2022 走看看