一.题目及要求

题目:

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

具体折扣如下所示: 本数 折扣 2本    5%

              3本    10%

              4本    20%   

              5本    25%

要求:

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

二.设计思路

1).<=5,最理想的状态是这几本书都不一样,直接按对应的折扣购买就可以

2).若6<=x<=9,理想状态是里面每个类别最多有两本重复的,分别计算6,7,8,9时,书的最低价格。

3).若>=10,和2)的情况重复

三.源代码

 

// Test_sale.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<iostream.h>
float discount_2(int number)//当数量在6到10 之间时
{
    float sum;
    switch(number)
    {
        case 6: sum=38; break;
        case 7: sum=45.2; break;
        case 8: sum=51.2; break;
        case 9: sum=55.5; break;
        case 10: sum=60; break;
        default:cout<<"ERROR!!!"<<endl;
    }
        return sum;
}
float discount_3(int number)       //当数量大于10时
{
    int remainder,itg;             //remainder是余数,itg是整数
    float sum;
    remainder=5+number%5;          //将数量分成两部分,一部分是5+number%5
    itg=number/5-1;                //一部分是number/5-1
    sum=discount_2(remainder);     //第一部分调用discount_2函数
    sum=sum+itg*30;                //另一部分直接按整套价格计算
    return sum;
}
float sale(int number)
{
    float sum;

    if(number<=5)                  //当数量小于6本时
    {
        switch(number)
        {
            case 1: sum=8; break;
            case 2:    sum=2*8*0.95; break;
            case 3: sum=3*8*0.9; break;
            case 4: sum=4*8*0.8; break;
            case 5: sum=5*8*0.75; break;
            default: cout<<"ERROR!!!"<<endl;
        }
    }
    else if(number<=10)            //当数量在5到10之间时
    {
        sum=discount_2(number);
    }
    else                          //当数量大于10本时
        sum=discount_3(number);
    return sum;
}
int main()
{
    int sale_number,flag=1;
    float sum;
    while(flag==1)
    {
        cout<<"请输入要购买的书的数量:";
        cin>>sale_number;
        sum=sale(sale_number);        //调用买书的最佳算法
        cout<<"最低的价格是"<<sum<<endl;
        cout<<"是否继续使用(是/1,否/0):";
        cin>>flag;
    }
    return 0;
}

四.结果及截图

posted on 2015-04-15 12:36  梦里侃花落  阅读(181)  评论(1编辑  收藏  举报