1.题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
n根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
n设计算法能够计算出读者购买一批书的最低价格。
要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。
2.设计思想
当购书数目为0~5时,不需讨论。
当购书数为6时,经过计算,5+1的方案最便宜,
当购书数为7时,经过计算,5+2的方案最便宜。
当购书数为8时,经过计算,4+4的方案最便宜。
但购书数为9时,经过计算,5+4的方案为最佳。
这里我们可以看出除了购书数为8时,没有5本折扣,其他数目都由5方案和其他方案组成。
而当购书数目n大于10时,我们可以把n看成:n=5*b+a,也就是一个5的倍数加上一个6~9之间的数,因此对于任何数目,主要的购书分歧在于这6~9本应该如何购买,购买方案参照上述
于是按照这个思想,我们设计程序时可以这样做,接受购书的数目num,把num用10mod,如果余数是6~9之间,就mod10处理除数和余数,如果是1~4之间,就减去5之后再mod10处理除数和余数,如果是余数是5和0的话,就直接按5方案处理。
3.源代码
#include<iostream.h> void show(int x , double &jia) { if(x==6) { cout<<" 5 1 "; jia=jia+5*8*0.75+8; } if(x==7) { cout<<" 5 2 "; jia=jia+5*8*0.75+2*8*0.95; } if(x==8) { cout<<" 4 4 "; jia=jia+8*8*0.8; } if(x==9) { cout<<" 5 4 "; jia=jia+5*8*0.75+4*8*0.8; } } void main() { cout<<"请输入要购买的书的数量:"<<endl; int num,a,b,i; double jia=0; cin>>num; cout<<"最便宜的购书方案:"<<endl; a=num%10; if(a>5) { b=num/5; for(i=1;i<=b;i++) { cout<<" 5 "; } jia=jia+b*8*5*0.75; show(a,jia); } else if(a<5&&a>0) { a=a+5; b=num/5-1; for(i=1;i<=b;i++) { cout<<" 5 "; } jia=jia+b*8*5*0.75; show(a,jia); } else { b=num/5; for(i=1;i<=b;i++) { cout<<" 5 "; } jia=jia+b*8*5*0.75; } cout<<endl<<"一共花费"<<jia<<"元"<<endl; }
3.截图
4.个人总结
算法很简单,方法很重要
时间: 2024-10-15 20:32:36