买书求如何获得折扣使价格最低

题目:

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

                               本数                  折扣

                                   2                       5%

                                   3                       10%

                                   4                       20%

                                   5                       25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
要求:将设计思想、代码实现、实现截图、个人总结、以博文的形式发表。
一、设计思路
      由键盘输入购买图书的数量num,只需考虑num个位数为6,7,8,9的情况,其他情况下,均可直接按照题目中所给的折扣进行计算。假设num的个位数为k,则用循环语句即可,从i=5开始循环,循环一次i--,i<k/2时结束循环,花费的价格为(k-5)*折扣+i*折扣。
二、源代码
#include<iostream.h>
double Discount(int type)
{
   double k;                          //进行折扣后的值
   switch(type)
   {
   case 1:k=8;break;
   case 2:k=2*8*0.95;break;
   case 3:k=3*8*0.9;break;
   case 4:k=4*8*0.8;break;
   case 5:k=5*8*0.75;break;
   default:break;
   }
   return k;
}
int main()
{
   int n;                                             //图书的数量
   int m=0;                                        //获取整十的数量
   int i;
   double cheap;                                 //最低折扣
   double cost[10]={0};                     //各折扣价格
   double price;                                  //最终的最低价格
   cout<<"请输入购买数量:"<<endl;
   cin>>n;
       if(n>10&&(n%10==3))
   {
     m=n/5-1;
     price=m*5*8*0.75+Discount(4)*2;
            cout<<"购书最低价格为:"<<price<<endl;
            return 0;
   }
   if(n>10)
   {
      m=n/10;
      n=n%10;
   }
   if(n<=5)
   {
      price=m*2*5*8*0.75+Discount(n);
      cout<<"购书最低价格为:"<<price<<endl;
      return 0;
   }
   for(i=5;i>=n/2;i--)
   {
      cost[i]=Discount(i)+Discount(n-i);
   }
   cheap=cost[5];
   for(i=5;i>=n/2;i--)
   {
      if(cheap>cost[i])
         cheap=cost[i];
   }
   price=m*2*5*8*0.75+cheap;
   cout<<"购书最低价格为:"<<price<<endl;
   return 0;
}
三、运行结果
 
四、个人总结
      遇到的问题:在比较各种折扣最小值时,只需比较填充进数组的那些值就可以了,其他值不需要参与比较,甚至有可能会影响最终结果。
      收获:通过这次课堂练习,使我编程更加严谨,思维更加缜密,能够及时发现一些细微的错误。
原文地址:https://www.cnblogs.com/benboerba/p/4425725.html