日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

买书问题

發布時間:2024/7/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 买书问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 題目:在節假日的時候,書店一般都會做促銷活動。由于《哈利波特》系列相當暢銷,店長決定通過促銷活動來回饋讀者。在銷售《哈利波特》平裝本系列中,一共有五卷,用編號0,1,2,3,4來表示。假設每一卷單獨銷售均需要8歐元,如果讀者一次購買不同的兩卷,就可以扣除5%的費用,三卷則更多。假設具體折扣的情況如下:

??? 本數??????? 折扣

??? 2??????????? 5%

??? 3??????????? 10%

??? 4??????????? 20%

??? 5??????????? 25%

??? 在一份訂單中,根據購買的卷數以及本數,就會出現可以應用不同折扣規則的情況。但是,一本書只會應用一個折扣。比如,讀者一共買了兩本卷一,一本卷二。那么,可以享受5%的折扣。另外一本卷一則不能享受折扣。如果有多種折扣,希望能夠計算出的總額盡可能的低。

??? 要求根據這樣的需求,設計出算法,能夠計算出讀者所購買一批書的最低價格。

?

??? 設計思想:

??? 利用歸納演繹的方法求解一般規律。根據題目提供的信息可知,當購買1-5本時,選擇不同的卷號則可以獲得的折扣最大,當購買的本數在6-10之間時,則需要通過分解的方式來計算最大的折扣。通過計算可知,購買的本數為6時,采用5+1的分解方式折扣最大,購買本數為7時,采用5+2的分解方式折扣最大,夠買本數為8時,采用4+4的分解方式折扣最大,購買本數為9時,采用5+4的分解方式折扣最大,當購買本數為10時,采用5+5的分解方式折扣最大。由此可以總結出一般規律,當購買的本數在1—10之間時,分別對應10種不同的情況,當購買的本數大于十時,則可以通過除以10求余的方式將其轉化為10以內的情況,最低總價只需再加上X倍的購買10本時的最低價格(X為除以10得到的商)。

?

??? 程序源代碼如下:

//買書問題 //Hailin Song 2016-06-03#include<iostream> using namespace std;int main() {int booknumber; //所需購買的本數cout << "請輸入需要購買多少本書:";cin >> booknumber;while (booknumber<1) //若輸入錯誤則重新輸入{cout << "輸入錯誤,請重新輸入:";cin >> booknumber;}if (booknumber < 11) //購買的本數為1-10的情況{switch (booknumber){case 1:cout << "購買方案:買5卷中的任意一卷,總價格為8歐元,沒有折扣!";break;case 2:cout << "購買方案:買5卷中的任意不同的兩卷,最低總價為15.2歐元!";break;case 3:cout << "購買方案:買5卷中的任意不同的三卷,最低總價為21.6歐元!";break;case 4:cout << "購買方案:買5卷中的任意不同的四卷,最低總價為25.6歐元!";break;case 5:cout << "購買方案:購買不同的五卷,最低總價為30歐元!";break;case 6:cout << "購買方案:購買不同的五卷,再從中任意挑選一卷,最低總價為38歐元!";break;case 7:cout << "購買方案:購買不同的五卷,再從中挑選不同的兩卷,最低總價為45.2歐元!";break;case 8:cout << "購買方案:購買兩套4本不同卷號的書,最低總價為51.2歐元!";break;case 9:cout << "購買方案:購買一套完整的五卷,再從五卷中挑選4本不同的卷,最低總價為55.6歐元!";break;case 10:cout << "購買方案:購買兩套完整的五卷,最低總價為60元!";break;}}else{int booktao = booknumber / 10; //購買本數除以10得到的商int bookyu = booknumber % 10; //購買本數除以10得到的余數switch (bookyu){case 0:cout << "購買方案:購買" << booktao * 2 << "套完整的五卷,最低總價為!" << 60 * booktao << "歐元!";break;case 1:cout << "購買方案:購買" << booktao*2 << "套完整的五卷,再任意挑選一卷,最低總價為" << 60 * booktao + 8 << "歐元!";break;case 2:cout << "購買方案:購買" << booktao*2 << "套完整的五卷,再任意挑選不同的兩卷,最低總價為" << 60 * booktao + 15.2 << "歐元!";break;case 3:cout << "購買方案:購買" << booktao*2 << "套完整的五卷,再任意挑選不同的三卷,最低總價為" << 60 * booktao + 21.6 << "歐元!";break;case 4:cout << "購買方案:購買" << booktao*2 << "套完整的五卷,再任意挑選不同的四卷,最低總價為" << 60 * booktao + 25.6 << "歐元!";break;case 5:cout << "購買方案:購買" << booktao*2+1 << "套完整的五卷,最低總價為" << 60 * booktao+30 << "歐元!";break;case 6:cout << "購買方案:購買" << booktao*2+1 << "套完整的五卷,再任意挑選一卷,最低總價為" << 60 * booktao + 38 << "歐元!";break;case 7:cout << "購買方案:購買" << booktao*2+1 << "套完整的五卷,再任意挑選不同的兩卷,最低總價為" << 60 * booktao + 45.2 << "歐元!";break;case 8:cout << "購買方案:購買" << booktao*2 << "套完整的五卷,再購買兩套4本不同的卷號,最低總價為!" << 60 * booktao + 51.2 << "歐元!";break;case 9:cout << "購買方案:購買" << booktao*2+1 << "套完整的五卷,再任意挑選不同的四卷,最低總價為!" << 60 * booktao + 55.6 << "歐元!";break;}}return 0; }

  

??? 測試結果截圖:

?

?

???個人總結:

??? 買書問題是《編程之美》中的一個經典案例,老師上課時給我們展示出題目后,我的第一個感覺就是懵,讀不懂題目的意識,在老師的引導下,開始一步步的深入分析題目。老師給我們的引導是采用演繹歸納的方法,即通過計算特殊的情況找出一般的規律。通過這種方式,我們找出了1-10以后的各種情況,對于超出十的情況則可以通過求余的方式轉化為十以內的情況。這種方法確實很好用,用這種方法去解決問題也非常簡單易懂。

??? 在《編程之美》這本書中,對于這個問題給出了兩種不同的解法,第一種解法采用了數學公式的算法,不過這種算法時間復雜度和空間復雜度都比較高,第二種算法是貪心策略,其實就是上述的演繹規范方法,但是對于《編程之美》上的介紹沒有看懂,以后有時間的話再進行深入的研究吧。

???

轉載于:https://www.cnblogs.com/hulidanxiang/p/5561038.html

總結

以上是生活随笔為你收集整理的买书问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。