1 #include<iostream> 2 using namespace std; 3 4 5 void Cheapest(int number_book) //计算最合适的购买方案 6 { 7 int result,count; //定义除数和余数,除数代表整套的本数,余数代表余下的需要找规律的本数 8 double cost,remainder[5]={0,0.05,0.1,0.20,0.25}; //定义最后的价格,表示折扣的数组 9 if(number_book<=0) //出错判断 10 { 11 cout<<"error"<<endl; 12 } 13 if(number_book>0) 14 { 15 result=number_book/10; 16 count=number_book%10; 17 if(count==8) //计算余数为8的那种情况 18 { 19 cost=2*result*30+8*4*0.2*2; 20 cout<<"购买"<<2*result<<"套及2种四本不同的哈利波特书"<<endl; 21 } 22 else 23 { 24 if(count<5) //计算余数小于5的那种情况 25 { 26 cost=2*result*30+8*count*(1-remainder[count-1]); 27 cout<<"购买"<<2*result<<"套及另外"<<count<<"本不同的哈利波特书"<<endl; 28 } 29 if(count>=5) //计算余数大于5的那种情况 30 { 31 count=count-5; 32 cost=(2*result+1)*30+8*count*(1-remainder[count-1]); 33 cout<<"购买"<<2*result+1<<"套及另外"<<count<<"本不同的哈利波特书"<<endl; 34 } 35 } 36 37 } 38 cout<<"购买这些书的最便宜的价格为:"<<endl; 39 cout<<cost<<endl; 40 } 41 int main() 42 { 43 int Num; 44 cout<<"请输入购买哈利波特书的数目:"<<endl; 45 cin>>Num; 46 cout<<"购买这些书的方案:"<<endl; 47 Cheapest(Num); 48 return 0; 49 } 50
一、题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
二、实验思路:1、根据实验规律可知,当购买的本数不大于5本时,买的几本都必须是不同的书,折扣力度最大,购买的书在大于5本小于10本时,买一整套5本的,
剩下的几本买成不同的折扣力度最大,但是有一种情况例外,就是8本,这样是购买两套4本不同的书最便宜,当购买的本数大于10本时,规律和十本相同。
2、根据购买者买书的数量除以10,购买的几个整套的10本按照两整套5本的计算,剩下的余数按以上规律计算。
3、计算余数时,先把余数是8本的计算出来,排除8本的情况,剩下的情况再分成本数大于5和小于5的两种情况。
三、实验截图:
1、余数有8
3、余数大于5
3、没有余数,买整套的书
四、实验总结:
这次的题目算是比较简单,但是是老师给出我们实验规律前提下,老师在课上留的题目,思路我们都没有想出来,当老师告诉我们思路时,我们感觉到这个题目十分的简单,所以这种题型就是算法简单,但是不容易想到,所以我们要锻炼自己的思维能力,如果不思考,只是根据别人的思路来写代码的话,永远只是一个程序员。