优惠购书

一、题目及题目要求

1. 题目:

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

本数 折扣 2    5%

             3    10%

             4    20%

             5    25%

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

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

当购书数量恰好为5的倍数时,统一的七五折计算;

2. 设计思想:

      如果购买的本书小于等于5本,则有多少本买多少本不一样的。如果大于5本,则需要考虑。比如6本,是3- 3优惠,还是5- 1优惠等等。没5个为一个循环,所以只需要考虑6到10就可以了。其中6 7 9都是5和余数最省钱。而8则是4- 4最省钱,所以这是一个例外,需要考虑。我计算了前十个的最优惠金额,找规律,发现8是个例外。

          当购书数量为6时,优惠方案为1+5,总价为:38;

          当购书数量为7时,优惠方案为2+5,总价为:45.2;

          当购书数量为8时,优惠方案为4+4,总价为:51.2;

          当购书数量为9时,优惠方案为4+5,总价为:55.6;

          在购书的数量大于5本的范围内,例如买书16本,优惠方案为8+8本;买43本书时,优惠方案为35+8本,此时是最佳的购书方案。

三、源程序:

#include <iostream>
using namespace std;

double add(int number)
{
    int m;
    double sum;
    m = number % 5 + 5;
    switch(m)
    {
        case 6://买6本书(5+1)
            sum = 38;   
            break;
        case 7://买7本书(5+2)
            sum = 45.2;
            break;
        case 8://买8本书(4+4)
            sum = 51.2;
            break;
        case 9://买9本书(4+5)
            sum = 55.6;
            break;
        case 5://买5本书(5)
            sum = 30;
            break;
    }
    return sum;
}
int main(int argc, char* argv[])
{
    double  sum = 0,d;    //sum表示购买书的总价
    int number,a, b, c;   //number表示购买的书的数量
                          //a = number / 5,b = 30 * (a - 1),d为一个中间变量
    int xuan;
    cout<<"请输入想要购买的数量:";
    cin>>number;
    if(number <= 0)
    {
        cout<<"输入错误!"<<endl;
            return 0;
    }
    else if (number <= 5)
    {
        switch(number)
        {            
            case 1:
                sum = 8;
                break;
            case 2:
                sum = 8*2*0.95;
                break;
            case 3:
                sum = 8*3*0.9;
                break;
            case 4:
                sum = 8*4*0.8;
                break;
            case 5:
                sum = 8*5*0.75;
                break;
        }
    }
    else 
    {
        a = number / 5;
        b = 30 * (a - 1);
        d = add(number);
        sum = b + d;
    }
    cout<<"买"<<number<<"本书"<<endl;
	cout<<"需要支付的最低金额为:"<<sum<<endl;
    return 0;
}

 四、运行截图

 

五、项目计划日志      

日期&&任务

听课 编写程序 阅读相关书籍 网上查找资料   日总计
周一 100   30 30 160
周二     30 30 60
周三   30 30 10 70
周四 100 20  30   150
周五   120   30 30 180
周六          
周日          
周总计 200 170 150 100

620

时间记录日志

5/16

日期 开始时间 结束时间 中断时间 净时间 活动 备注
5/30 14:00 15:50 10 100 听课 软件工程上课
  21:04 21:  34 0 30 阅读书籍  
  22:10 22: 40 30 网上查找资料  
 5/31  18:00  18:30  0  30  阅读书籍  
  22:  15 22:  45 30 网上查找资料  
6/1 19:  25 20: 00 5 30 编写程序 优惠购书
  22:00 22: 30 0 30 阅读书籍  
  22:40 22: 50 0 10 查找资料  
6/2 14:00 15:  50 10 100 上课 软件工程上机
  18:26 18: 50 20 编写程序 优惠购书
   22:00  22:30  0  30  阅读书籍  
6/3 14:  00 16:  20 20 120  编写程序  
  11:23 12: 00 7 30 网上查找资料  
   21:00  21:30  0  30  阅读书籍  

六、个人总结

      在本次求最优惠的买书价格的程序设计中,我针对题意用上了枚举的方式直接给出了买6,7,8,9本书时的最优惠的总价钱,并没有用一定的算法来实现这个求解过程,虽达到了最后的目的,但是当打折方案改变时,也就不适用了。由此可见,我们的思路还不是很开阔,只局限于那些 自己学过的简单的常用的知识,所以我还有很大的进步的空间。

     

原文地址:https://www.cnblogs.com/qizhonh/p/5553323.html