题目要求:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
设计思想:
题目的关键是解决当购买6、7、8、9本时应如何购买。经计算
6本时:1本+5本最优;
7本时:2本+5本最优;
8本时:4本+4本最优;
9本时:4本+5本最优。
1-5本时不用特殊考虑,其他本数时将其转换为6-9本的情况处理。即将本数对10求余,余数大于5则将求余结果带入6-9本情况中,同时计算减去余数后包含几个5;
余数小于五则直接计算减去余数后包含几个5,再加上余数的买书计算结果。
代码:
#include<iostream> using namespace std; void main() { int i,n,j; double sum; cout<<"请输入需要购买书的数量:"; cin>>i; n=i/10; j=i%10; sum=n*60; switch(j) { case 1: { sum=sum+8; cout<<"可以分为"<<n*2<<"个5本,和"<<1<<"个1本"<<"价格最低为"<<sum<<endl;break;} case 2: { sum=sum+15.2; cout<<"可以分为"<<n*2<<"个5本,和"<<1<<"个2本"<<"价格最低为"<<sum<<endl;break;} case 3: { sum=sum+21.6; cout<<"可以分为"<<n*2<<"个5本,和"<<1<<"个3本"<<"价格最低为"<<sum<<endl;break;} case 4: { sum=sum+25.6; cout<<"可以分为"<<n*2<<"个5本,和"<<1<<"个4本"<<"价格最低为"<<sum<<endl;break;} case 5: { sum=sum+30; cout<<"可以分为"<<n*2+1<<"个5本"<<"价格最低为"<<sum<<endl;break;} case 6: { sum=sum+38; cout<<"可以分为"<<n*2+1<<"个5本,和"<<1<<"个1本"<<"价格最低为"<<sum<<endl;break;} case 7: { sum=sum+45.2; cout<<"可以分为"<<n*2+1<<"个5本,和"<<1<<"个2本"<<"价格最低为"<<sum<<endl;break;} case 8: { sum=sum+51.2; cout<<"可以分为"<<n*2<<"个5本,和"<<2<<"个4本"<<"价格最低为"<<sum<<endl;break;} case 9: { sum=sum+55.6; cout<<"可以分为"<<n*2+1<<"个5本,和"<<1<<"个4本"<<"价格最低为"<<sum<<endl;break;} case 0: { sum=sum; cout<<"可以分为"<<n*2<<"个5本"<<"价格最低为"<<sum<<endl;break;} } }
运行结果: