书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
设计代码
#include<iostream>
using namespace std;
void main()
{
int a,b,c;
double price;
cout<<"请输入要买书的本数:";
cin>>a;
b=a/10;
c=a%10;
switch(c)
{
price=0;
case 0:
price=60*b;
break;
case 1:
price=60*b+8;
break;
case 2:
price=60*b+15.2;
break;
case 3:
price=60*b+21.6;
break;
case 4:
price=60*b+25.6;
break;
case 5:
price=60*b+30;
break;
case 6:
price=60*b+38;
break;
case 7:
price=60*b+41.2;
break;
case 8:
price=60*b+51.2;
break;
case 9:
price=60*b+55.6;
break;
}
cout<<"需要最少的钱为:"<<price;
}
思路:从买一本开始算,一直算到第十本,就可以知道1-10 本中最便宜的方案,超过十本之后你在慢慢仔细去算,就可以发现他们其实就是前面十本以内的搭配,例如11本就是5+5+1,21本就是5+5+5+5+1,这样就可以把算法转换到十本以内来计算。
总结:switch语句早早的忘光了,原来在case后面是:而不是;还有break的作用真的很大,我第一次有一个地方没有加break,导致10笨的时候算到是68而不是60找了好久这个错误才找到,学会了一个知识点。
原文:http://www.cnblogs.com/jump/p/4504716.html