用折後最低價買書
一、程式要求
書店針對《哈利波特》系列書籍進行促銷活動,一共5卷,用編号0、1、2、3、4表示,單獨一卷售價8元, 具體折扣如下所示:
本數 折扣
2 5%
3 10%
4 20%
5 25%
根據購買的卷數以及本數,會對應不同折扣規則情況。單數一本書隻會對應一個折扣規則,例如購買了兩本卷1,一本卷2,則可以享受5%的折扣,另外一本卷一則不享受優惠。
設計算法能夠計算出讀者購買一批書的最低價格。
二、程式設計思想
列舉出買十本書以内的所有情況,從中找規律:買一本的時候不打折扣,價錢為 8;買兩本的時候買最低價為 15.2(1+1);買三本的時候最低價為 21.6(1+1+1);買四本的時候最低價為25.6(1+1+1+1);買五本的時候最低價為30(1+1+1+1+1);買六本的時候最低價為 38(5+1);買七本的時候最低價為 45.2(5+1+1);買八本的時候最低價為 51.2(4+4);買九本的時候最低價為 55.6(5+4);買十本的時候最低價為 60(5+5)。按照上面的情況可以看出:購買8本書時,最低價并不是(5+3),是以每10本書是一個循環。書的總數除以10求餘求商:餘數部分按10本以内數目計算;商數部分按整套購買計算。按此類推,算出最低價。
三、源程式
//李俏 2016,6,2
//根據折扣,計算買書的最低價
#include<iostream>
using namespace std;
int main()
{
int num;//書的數量
double money;//折後的錢數
int i, j;
cout << "請輸入要買的書的數量:";
cin >> num;
while (num <= 0)
{
//exit(1);
cout << "請重新輸入要買的書的數量(數量必須為正數):";
cin >> num;
}
i = num % 10;
j = num / 10;
switch (i)
{
case 0:
money = j * 40 * 0.75*2 ;
break;
case 1:
money = j * 40 * 0.75 * 2 + 8;
break;
case 2:
money = j * 40 * 0.75 * 2 + 8 * 2 * 0.95;
break;
case 3:
money = j * 40 * 0.75 * 2 + 8 * 3 * 0.9;
break;
case 4:
money = j * 40 * 0.75 * 2 + 8 * 4 * 0.8;
break;
case 5:
money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75;
break;
case 6:
money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75 + 8;
break;
case 7:
money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75 + 8 * 2 * 0.95;
break;
case 8:
money = j * 40 * 0.75 * 2 + 8 * 4 * 0.8 * 2;
break;
case 9:
money = j * 40 * 0.75 * 2 + 8 * 5 * 0.75 + 8 * 4 * 0.8;
break;
}
cout << "這批書的折後價為:"<<money<<endl;
return 0;
}
四、結果截圖

五、心得體會
課堂上,老師引導我們:根據題設,列舉各種情況并且計算各種可能的結果,經過比較得到最低價;再然後從購買10以内數量的書、得到的每個最低價中,找規律,但是由于自己的不自信、計算的結果不正确,沒能找到規律;最後,老師給出了思路——書的總數超過10本時,也可按10本以内的計算方法計算,并且指出購買8本書是一個特殊情況。
就實作來講,相比前兩次的課堂練習,這次的還是比較簡單的,關鍵在于解題的思路和從中發現的規律。這次練習實作後,内心還有點兒小激動,因為題目不太複雜,可以把自己的了解以程式的形式呈現出來,但是激動之餘,還是有些擔心,擔心能力不能提高、以後遇到問題還是解決不了。通過本次實驗,我複習了一些常用的基礎文法點,以後會更加熟練的。