题目:书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
要求:设计算法能够计算出读者购买一批书的最低价格。
设计思路: 由需求者键入所需购买的本数,然后由程序提供最优购书方案。通过仔细阅读题目,可以把情况分为3种:1、购书1~5本时,直接购入不同书券即可;2、购书6~9本时可通过简单的计算得出有唯一的最优购书方案(购6本:一套+单一卷;购7本:一套+不同卷两卷;购8本:两个不同卷4卷;购9本:一套+不同卷4卷);3、购书10本及以上,可循环第二种情况。
程序代码:
#include<iostream.h> #include<math.h> int main() { int n; cout<<"请输入您想要购买的本数:"; cin>>n; if (n==0) { cout<<"最优的购书方案为:购买不同卷"<<n<<"卷"<<endl; cout<<"最优方案的所需金额为"<<n*8<<"元"<<endl; } if (n==1) { cout<<"最优的购书方案为:购买不同卷"<<n<<"卷"<<endl; cout<<"最优方案的所需金额为"<<n*8<<"元"<<endl; } if (n==2) { cout<<"最优的购书方案为:购买不同卷"<<n<<"卷"<<endl; cout<<"最优方案的所需金额为"<<n*8*0.95<<"元"<<endl; } if (n==3) { cout<<"最优的购书方案为:购买不同卷"<<n<<"卷"<<endl; cout<<"最优方案的所需金额为"<<n*8*0.9<<"元"<<endl; } if (n==4) { cout<<"最优的购书方案为:购买不同卷"<<n<<"卷"<<endl; cout<<"最优方案的所需金额为"<<n*8*0.8<<"元"<<endl; } if (n==5) { cout<<"最优的购书方案为:购买不同卷"<<n<<"卷"<<endl; cout<<"最优方案的所需金额为"<<n*8*0.75<<"元"<<endl; } if (n==6) { cout<<"最优的购书方案为:购买一套以及不同卷"<<n-5<<"卷"<<endl; cout<<"最优方案的所需金额为"<<5*8*0.75+8<<"元"<<endl; } if (n==7) { cout<<"最优的购书方案为:购买一套以及不同卷"<<n-5<<"卷"<<endl; cout<<"最优方案的所需金额为"<<5*8*0.75+16*0.9<<"元"<<endl; } if (n==8) { cout<<"最优的购书方案为:购买一套的不同卷"<<4<<"卷"<<endl; cout<<"最优方案的所需金额为"<<4*8*0.8*2<<"元"<<endl; } if (n==9) { cout<<"最优的购书方案为:购买一套以及不同卷"<<n-5<<"卷"<<endl; cout<<"最优方案的所需金额为"<<5*8*0.75+40*0.8<<"元"<<endl; } if (n>=10) { int j,k; j=n/5; k=n%5; if (k==0) { cout<<"最优的购书方案为:购买完整"<<j<<"套"<<endl; cout<<"最优方案的所需金额为"<<j*5*8*0.75<<"元"<<endl; } if (k==1) { cout<<"最优的购书方案为:购买完整"<<j<<"套,以及不同卷1卷"<<endl; cout<<"最优方案的所需金额为"<<j*5*8*0.75+8<<"元"<<endl; } if (k==2) { cout<<"最优的购书方案为:购买完整"<<j<<"套,以及不同卷2卷"<<endl; cout<<"最优方案的所需金额为"<<j*5*8*0.75+16*0.9<<"元"<<endl; } if (k==3) { cout<<"最优的购书方案为:购买完整"<<j<<"套,以及两套不同卷4卷"<<endl; cout<<"最优方案的所需金额为"<<j*5*8*0.75+4*8*0.8*2-40*0.75<<"元"<<endl; } if (k==4) { cout<<"最优的购书方案为:购买完整"<<j<<"套,以及不同卷4卷"<<endl; cout<<"最优方案的所需金额为"<<j*5*8*0.75+32*0.8<<"元"<<endl; } } return 0; }
程序测试:
总结思考:
在程序的编辑过程中,出现了最低级的错误,赋值(=)与判断是否相等(==)混淆,导致编译出现错误。今后我一定会仔细注意。