课堂练习之《买书》
題目要求:
書店針對《哈利波特》系列書籍進行促銷活動,一共5卷,用編號0、1、2、3、4表示,單獨一卷售價8元, 具體折扣如下所示:| 書的數目 | ? ? ?折扣價 |
| 1 | ? ? ?100% |
| 2 | ? ? ?95% |
| 3 | ? ? ?90% |
| 4 | ? ? ?80% |
| 5 | ? ? ?75% |
設計思想:
情況一、1-5本時,按照正常的價格進行打折。 情況二、當第6-10(除去8)本時,按照數目拆分成(5+n)來進行打折,比如6本,就可以先買五本,再買一本。 情況三、當第8本時,變成了(4+4)最優惠。 根據以上幾種情況,第8中另外考慮。我們設數目為number,再看它有x個十本(以十本為單位),十本的數目乘以60。然后再看不足十本的數目,y=number%10,這樣,將y乘以對應的十本以內的最優惠價格,加上之前的以十本為單位算出來的數目,即為最后的最優惠的總價格。代碼實現
1 /* 2 * 課堂練習之《買書》 3 * Sno:20133078 4 * Anthor:yulei 5 * Date:2016.6.1 6 */ 7 #include <iostream> 8 using namespace std; 9 double Buy(int number) //錢向書的本數轉換 10 { 11 double a[6]={0,1,0.95,0.9,0.8,0.75}; //打折表,第n本打折率為a[n] 12 double b[11]; 13 //double b[11]={0,8,15.2,21.6,25.6,30,38,45.2,51.2,55.6,60}; //前十本書的價格表 14 15 for(int i=0;i<11;i++) //用循環來實現前十本價格表的構建 16 { 17 int x=i/5; 18 int y=i%5; 19 if(i==8) 20 { 21 b[i]=(4*8*a[4])*2; //當第8本時候,選取4+4的優惠政策更便宜 22 } 23 b[i]=x*5*8*a[5]+y*8*a[y]; //除去第8本,其他采用5+n的優惠方法來計算最便宜 24 } 25 int m=number/10; //數目中有幾個“十本” 26 int n=number%10; //不足是本,剩下的按照價格變來加入總書目 27 double price; //價格為兩部分組成 28 price = m*60+b[n]; 29 return price; 30 } 31 int main() 32 { 33 int number; 34 cout<<"請輸入任何數量的書:"<<endl; 35 cout<<"\t* 非整數按整數部分處理"<<endl; 36 cin>>number; 37 while(number<0) //不能輸入負數 38 { 39 cout<<"不能輸入負數,請重新輸入:"; 40 cin>>number; 41 } 42 cout<<"最少需要的錢數:"<<Buy(number)<<endl; 43 return 0; 44 }運行截圖
?
?
總結
? ? ? 開始的時候,我將前十本的價格進行了固定,即先算出最優惠的價格,做了這樣一個表,double b[11]={0,8,15.2,21.6,25.6,30,38,45.2,51.2,55.6,60}; //前十本書的價格表,當我需要時,直接拿過來用,后來為了方便打折,將計算過程也列出來了,變成了代碼所示的那樣,這樣方便理解和修改,但是時間復雜度可能就大了。
?轉載于:https://www.cnblogs.com/cnyulei/p/5561565.html
總結
- 上一篇: Eclipse GBK批量转UTF-8插
- 下一篇: Java 命令行编译项目