要求:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
|
本数 |
折扣 |
|
2 |
5% |
|
3 |
10% |
|
4 |
20% |
|
5 |
25% |
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
思路:
找出规律
注意到小于5本书的时候,套用现有的优惠条件就是最优惠的方案;
如果书的数目大于10本,此时可以简化成买几个5本和一次6到10本这样的方案来达到最优惠的目的;
对6~10本进行简单的计算算出:
6本:分解成5+1本;总价为:30+8元
或分解成4+2本;总价为:25.6+15.2元
或分解成3+3本;总价为:21.6+21.6元
可以看出5+1本最划算;
7本:分解成5+2本;总价为:30+15.2元
或分解成4+3本;总价为:21.6+25.6元
可以看出5+2本最划算;
8本:分解成5+3本;总价为:30+21.6元
或分解成4+4本;总价为:25.6+25.6元
可以看出4+4本最划算
9本:分解成5+4本;总价为:30+25.6元
此时为最划算(只有这一种情况)
10本:买两个5本就行;
代码:
#include <iostream>
int main()
{
int n;
cout<<"请输入要买几本书?"<<endl;
cin>>n;
if(n<6)
{
cout<<"请重新输入大于5的书目:";
cin>>n;
}
int a=n%5;
int b=n/5;
switch(a)
{
case 1:
cout<<"您先买"<<b*5<<"本书,"<<"再买1本书最划算"<<endl;
cout<<"总价为:"<<b*30+8<<"元";
break;
case 2:
cout<<"您先买"<<b*5<<"本书,"<<"再买2本书最划算"<<endl;
cout<<"总价为:"<<b*30+15.2<<"元";
break;
case 3:
cout<<"您先买"<<(b-1)*5<<"本书,"<<"再买两次4本书最划算"<<endl;
cout<<"总价为:"<<(b-1)*30+51.2<<"元";
break;
case 4:
cout<<"您先买"<<b*5<<"本书,"<<"再买4本书最划算"<<endl;
cout<<"总价为:"<<b*30+25.6<<"元";
break;
case 0:
cout<<"您直接买"<<b*5<<"本书最划算"<<endl;
cout<<"总价为:"<<b*30<<"元";
break;
}
//继续吗?
int con;
cout<<endl<<"继续吗?是输入1,否输入0:";
cin>>con;
if(con==1)
{
main();
}
else
{
return 0;
}
return;
}
结果截图:

posted on
浙公网安备 33010602011771号