問題:
書店針對《哈利波特》系列書籍進行促銷活動,一共5卷,用編号0、1、2、3、4表示,單獨一卷售價8元, 具體折扣如下所示:
本數 | 折扣 |
2 | 5% |
3 | 10% |
4 | 20% |
5 | 25% |
根據購買的卷數以及本數,會對應不同折扣規則情況。單數一本書隻會對應一個折扣規則,例如購買了兩本卷1,一本卷2,則可以享受5%的折扣,另外一本卷一則不享受優惠。設計算法能夠計算出讀者購買一批書的最低價格。
解決方法:當購買書籍在1-5本之間的時候,購買不同的書籍最省錢,當購買6本時有3+3,4+2,5+1這三種方法,計算得5+1這種方法最省錢,當購買7本時有4+3,5+2這兩種方法,計算得5+2這種方法最省錢,當購買8本時有4+4,5+3這兩種方法,計算得4+4這種方法最省錢,當購買9本時有5+4這種方法,計算得5+4這種方法最省錢。當購買10本時有5+5這種方法,計算得5+5這種方法最省錢。由此分析得購買數量是以10本為一個周期。當購買數量超過10本時,進入下一個循環周期。
代碼:
//李妍
//20133093
#include<iostream>
using namespace std;
int Money(int num)
{
double money;
int N = (int) (num / 10);
switch (num % 10){
case 0: money = 0; break;
case 1: money = 1 * 8; break;
case 2: money = 2 * 8 * 0.95; break;
case 3: money = 3 * 8 * 0.9; break;
case 4: money = 4 * 8 * 0.8; break;
case 5: money = 5 * 8 * 0.75; break;
case 6: money = 1 * 8 + 5 * 8 * 0.75; break;
case 7: money = 5 * 8 * 0.75 + 2 * 8 * 0.95; break;
case 8: money = 4 * 8 * 0.8 * 2; break;
case 9: money = 5 * 8 * 0.75 + 4 * 8 * 0.8; break;
}
return N * 5 * 8 * 0.75 * 2 + money;
}
int main()
{
int num = 0;//數量
cout << "請輸入要買書的數量:" << endl;
cin >> num;
while (num == 0){
cout << "要買書的數量不能為0!請重新輸入:" << endl;
cin >> num;
}
cout << "當買" << num << "本書時,花費最少錢是:" << Money(num)<<"元。" << endl;
return 0;
}
試驗結果:
試驗總結:
本次試驗要求學會總結規律,将一些困難問題仔細分析,通過尋找他們之間的規律,将問題簡單化。老師在下課之前簡單的說了一下程式設計思路,我就恍然大悟。我覺得讀懂題目真的很重要,要注意培養自己讀題審題的能力。