课堂练习_买书的最低价钱

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

                               本数                   折扣

                                   2                       5%

                                   3                       10%

                                   4                       20%

                                   5                       25%

    根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,
  例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
    设计算法能够计算出读者购买一批书的最低价格。
二、 解决思想
    首先,根据输入的课本的数目n来判断该用什么购买方案。且可知,在n>10的情况下,p = n/10,q = n%10,
  p组5本的书可享受最高的优惠,再根据计算得出q从0~9的最佳的解决方案,即可算出最高的优惠。
三、代码
  
// harry.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#define M 8
int main(int argc, char* argv[])
{
    int num;
    int p,q;
    float Money;
    printf("请输入要买的书的本书:");
    scanf("%d",&num);
    p = num/10;
    q = num%10;
    switch(q)
    {
    case 0:
        Money = 2*p*M*0.75*5;
        printf("最低价钱%.2f\n",Money);
        break;
    case 1:
        Money = 2*p*M*0.75*5+M;
        printf("最低价钱%.2f\n",Money);
        break;
    case 2:
        Money = 2*p*M*0.75*5+p*M*0.95;
        printf("最低价钱%.2f\n",Money);
        break;
    case 3:
        Money = 2*p*M*0.75*5+p*M*0.9;
        printf("最低价钱%.2f\n",Money);
        break;
    case 4:
        Money = 2*p*M*0.75*5+p*M*0.8;
        printf("最低价钱%.2f\n",Money);
        break;
    case 5:
        Money = 2*p*M*0.75*5+p*M*0.75;
        printf("最低价钱%.2f\n",Money);
        break;
    case 6:
        Money = (2*p+1)*M*5*0.75+M;
        printf("最低价钱%.2f\n",Money);
        break;
    case 7:
        Money = (2*p+1)*M*5*0.75+2*M*0.95;
        printf("最低价钱%.2f\n",Money);
        break;
    case 8:
        Money = 2*p*M*5*0.75+4*M*0.8*2;
        printf("最低价钱%.2f\n",Money);
        break;
    case 9:
        Money = (2*p+1)*M*5*0.75+4*M*0.8;
        printf("最低价钱%.2f\n",Money);
        break;
    default:
        printf("error!\n");
    }
    return 0;
}

 

四、运行结果

  

五、总结

    在本次的实现过程总,首先对于输入的书的数量加以分析(如解决思想中所述),对于p,只需将其根据折扣,然后计算得知,

  而对于q则不同,当q∈(1,5)时,可根据相应的折扣予以计算输出,当q∈(6,9)时,初q = 8时分成4本的两组,其他的均由

  一个5本和q-5本组成,这样可使折扣达到最大。在输出时,根据价格的通常表示方法,定义一个float型的Money,然后输出小数点后

  的两位即可。其方法为printf(“%.2f”,Money);。

posted @ 2015-04-14 19:55  我是一个小小小字符串  阅读(129)  评论(2编辑  收藏  举报