zoukankan      html  css  js  c++  java
  • 书店促销活动

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

                                   本数                  折扣

                                    2                    5%

                                    3                    10%

                                    4                    20%

                                    5                    25%

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

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

     

    思路:

      如果书的数量是10的倍数,很容易看出,分成两套5本买是最便宜的,故只用考虑余下单本(1~9)的情况,并且1~5本的最低折扣题目也已经给出,则再分析6~9本的即可。

    枚举出每一种情况:

    (6本)

    1本+5本:=38元(最低)

    2本+4本:=40.8元

    3本+3本:=43.2元

    (7本)

    2本+5本:=45.2元(最低)

    3本+4本:=47.2元

    (8本)

    3本+5本:=51.6元

    4本+4本:=51.2元(最低)

    (9本)

    4本+5本:=55.6元(最低)

    可以看出,除了8本分成两个4本的组合最划算外,其他三个都是包含5本的组合。

     

    源代码:

     

    #include<iostream.h>
    #define price 8
    
    int main()
    {
    	int mount;		//购买书的数量
    	double sum;		//最低价格
    	int i,j;
    	cout<<"How many books you want to buy: ";
    	cin>>mount;
    	i=mount/10;
    	sum=i*10*price*(1-0.25);
    	j=mount%10;
    	switch(j)
    	{
    	case 0:
    		sum=sum;
    		break;
    	case 1:
    		sum=sum+price;
    		break;
    	case 2:
    		sum=sum+j*price*(1-0.05);
    		break;
    	case 3:
    		sum=sum+j*price*(1-0.1);
    		break;
    	case 4:
    		sum=sum+j*price*(1-0.2);
    		break;
    	case 5:
    		sum=sum+j*price*(1-0.25);
    		break;
    	case 6:
    		sum=sum+5*price*(1-0.25)+price;
    		break;
    	case 7:
    		sum=sum+5*price*(1-0.25)+2*price*(1-0.05);
    		break;
    	case 8:
    		sum=sum+4*price*(1-0.2)*2;		//余8的情况特殊
    		break;
    	case 9:
    		sum=sum+5*price*(1-0.25)+4*price*(1-0.2);
    		break;	
    	}
    	cout<<"the lower price: "<<sum<<endl;
    } 
    

     

    运行结果:

     

     

     

    总结:

      时隔一段时间,又继续做课堂练习了,还好没有手生。

      分析题目,首先想到的思路就是前面写到的,并没有考虑到什么算法,但是在折扣情况很多时还一一举出所有的分类肯定很麻烦,这要求从中找到规律,设计一种适用的算法。课堂上,听了几个同学的发言,对其中一个同学的算法印象很深,同样是考虑余下单本的情况折扣率。2本(0.1)、3本(0.3)、4本(0.8)、5本(1.25),看组合和最大则取之。比自己考虑的存在特殊情况,而这种方法不会存在特里。

      多发现自己与他人的不同,分析过程,找到不足。

     

  • 相关阅读:
    第13讲——使用类
    第12讲——对象和类
    第11讲——面向对象编程
    第10讲——名称空间
    数论19——高斯消元
    贪心思想
    重要的转变(感觉自己最近堕落必读)
    java面试
    Java泛型
    系统设计
  • 原文地址:https://www.cnblogs.com/mumulucky/p/4428176.html
Copyright © 2011-2022 走看看