书店促销

一、题目及要求:

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格

二、 设计思想

1、若购买的图书不超过5本,那么分一次购买且购买不同的书籍最便宜。
2、若购买的图书本书大于5本,少于10本,我将买6,7,8,9本书的情况都列举出来,发现:
买6本:分两次购买,5本1本最便宜
买7本:分两次购买,5本2本最便宜
买8本:分两次购买,4本4本最便宜
买9本:分两次购买,5本4本最便宜
3、当购买的图书大于10本时,由于买5本时折扣最高,所以用购买数量模5,余数+5就会对应6,7,8,9本的情况,买(商-1)次5本,这样可是价格最低。

三、源程序代码

#include "stdafx.h"

#include "iostream.h"

#define PRICE 8

double discount[5]={0,0.05,0.1,0.2,0.25};

 

double Caculate(int num1,int num2)        //计算该情况的价钱

{

    double money,money1,money2;

    money1=(PRICE-PRICE*discount[num1-1])*num1;

    money2=(PRICE-PRICE*discount[num2-1])*num2;

    money=money1+money2;

    return money;

}

double Discount(int num)            //分情况讨论价钱

{

    int k,yushu;

    double money1,money2,min;

    k=num/5;                    //取整

    yushu=num%5;                //取余

    min=num*PRICE;

    switch(k)

    {

        case 0:

            money1=(PRICE-PRICE*discount[num-1])*num;

            break;

        default:

            if(yushu==0)

            {

                money1=(PRICE-PRICE*discount[4])*num;

                return money1;

            }

            for(int i=1;i<(yushu+5);i++)

            {

                money1=Caculate(i,(yushu+5)-i);

                if(money1<min)

                    min=money1;

            }

            if(num>9)

                money2=(k-1)*5*(PRICE-PRICE*discount[4]);

            else

                money2=0;

            return min+money2;

    }

    return money1;

}

int main(int argc, char* argv[])

{

    int booknum;

    double money;

    cout<<"请输入购买书籍的数量:";

    cin>>booknum;

    money=Discount(booknum);

    cout<<"最优惠的价格是"<<money<<"元"<<endl;

    return 0;

}

四、总结

其实想法一开始是对的,后来由于计算问题,觉得这个想法有问题就想其他解决方法了。后来经同学老师的提示,原来是算错了。一直对计算不感冒,要不高考数学分数这么低

原文地址:https://www.cnblogs.com/bill927/p/4588334.html