购书最便宜的方案

#include <iostream>
using namespace std;

void LowestPrice(int n){
    
    double lowprice = 0;
    int p ,q;
    p = n/10;
    q = n%10;
    switch(q){
    case 0:lowprice = p*20;break;
    case 1:lowprice = p*20+8;break;
    case 2:lowprice = p*20+8*2*0.95;break;
    case 3:lowprice = p*20+8*3*0.9;break;
    case 4:lowprice = p*20+8*4*0.8;break;
    case 5:lowprice = p*20+8*5*0.75;break;
    case 6:lowprice = p*20+8*5*0.75+8;break;
    case 7:lowprice = p*20+8*5*0.75+8*2*0.95;break;
    case 8:lowprice = p*20+8*4*0.8*2;break;
    case 9:lowprice = p*20+8*5*0.75+8*4*0.8;break;
    }
    cout<<"购买"<<n<<"书的最低价格是:"<< lowprice;
}

void main(){
   int n;
   cout<<"请输入想买的书的本数:"<<endl;
   cin>>n;
   LowestPrice(n);
   system("pause");
}

题目:

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

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

思路:

有题目可知,在购买的书的本数n小于10时,2-5本按照对应的折扣进行计算即可,当6<=n<=9时,要考虑如何购买可以使价钱最少。通过计算当n=6时,按照5本一套加上剩下的一本,价钱最少。当n=7时,按照5本一套加上剩下的2本价钱最少,当n=8时,按照4本一套共买两套价钱最少,当n=9时,按照5本一套加上剩下的4本价钱最少。             当在购买的书的本数n大于10时,n除以10,商p余q。整数部分即按照5本一套买2p套,剩下的q则根据上边的2-9进行计算即可

总结:

其实这个想法多亏了老师的提醒,讨论6-9使整个计算过程简单了不少然后当大于10时,采用对n除以10取余的方法,此处我采取的是除以10,而不是除以五,除以10得到的余数更明显能够看出是2-9中的那个数,是计算更加简便

原文地址:https://www.cnblogs.com/laozhanghahaha/p/4506982.html