程式設計之美 1 4 買書問題

2021-06-27 04:27:09 字數 1893 閱讀 5547

1.4 買書問題 

在 節假日的時候,書店一般都會做**活動。由於《哈利波特》系列相當暢銷,店長決定通過**活動來回饋讀者。在銷售的《哈利波特》平裝本系列中,一共有五 卷,用編號0, 1, 2, 3, 4來表示。假設每一捲單獨銷售均需要8歐元。

如果讀者一次購買不同的兩卷,就可以扣除5%的費用,三卷則更多。假設具體折扣的情況如下:

本數          折扣

2           5%

3          10%

4          20%

5          25%

在乙份訂單中,根據購買的卷數以及本書,就會出現可以應用不同折扣規則的情況。

但是,一本書只會應用乙個折扣規則。比如,讀者一共買了兩本卷一,一本卷二。

那麼,可以享受到5%的折扣。另外一本卷一則不能享受折扣。

如果有多種折扣,希望能夠計算出的總額盡可能的低。

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

當書的數目n<5時,直接按照折扣購買

當書的數目n>5時,按最大折扣購買;

情況如下:

先找出是所有書中5種不同的書,如果有則按照5本書折扣價購買

其次找出剩餘書中所有4種書,如果有則按照4本書的折扣價購買

再找出剩餘書中所有3種書,如果有則按照3本書的折扣價購買 

最後在剩餘書中找出所有2種書,如果有則按照2本書的折扣價購買

剩下的書則按照全價購買。

如果按照這種方法(貪心法)存在反例,

比如買8本書時,可以拆成5+3,折扣為1.55;

也可以拆成4+4,折扣為1.6 

這種兩種情況組合中都包括,通過選擇乙個折扣最低的可以排除掉第一種情況。

結論:貪心策略不可取 

五卷書的**相同都是8歐元,所以購買(1,2,3,5,4)跟(5,4,3,2,1)相同。

讓所購買書按照本書遞減討論。

(x1,x2,x3,x4,x5)代表購買每卷的個數,f(x1,x2,x3,x4,x5)代表最低**。x1>x2>x3>x4>x5

f(x1,x2,x3,x4,x5)=0  ;當所有引數都為0的情況

f(x1,x2,x3,x4,x5)= 

min

#include#include#include#includeusing namespace std;

const int max=100000000;//定義乙個最大值,相當於取最小值時忽略這個位置的值

bool cmp(double a,double b)

double min(double a, double b, double c, double d, double e)//返回最小值

;

sort(nn,nn+5,cmp);//從大到小排序

return nn[4]; }

double f(int x1,int x2,int x3,int x4,int x5)//動態規劃

; sort(n,n+5,cmp);//從大到小排序

x1=n[0];x2=n[1];x3=n[2];x4=n[3];x5=n[4];

if (x5>=1)

else if (x4>=1)

else if (x3>=1)

else if (x2>=1)

else if (x1>=1)

else//都為0

}int main()

; int n1[5] = ;

//5+3=5*8*0.75+3*8*0.9=51.6

//4+4=4*8*0.8+4*8*0.8=51.2

double solution =f(n1[0],n1[1],n1[2],n1[3],n1[4]);

cout<<"所花費的最少的錢為:"<

買書問題 程式設計之美1 4

買書問題,如果一種書籍五冊,單獨買一冊8元,買兩冊不同的打95折,買三冊不同的書籍9折,買四冊不同的書籍8折,買五冊不同書籍75折,問怎麼買書最便宜。比如買2本一冊,2本2冊,2本三冊,1本4冊,1本5冊 那麼最優打折方式就是 分兩次購買,一本一冊,一本二冊,一本三冊和一本四冊,然後就是剩下的書籍 ...

程式設計之美 1 4 買書問題

題目 在節假日的時候,一般書店都會做 假設一套書共有5冊,沒冊書的定價都是相同的30元,店家為了 推出了乙個方案,具體如下 這裡的折扣是每本書都享受這個折扣,當然前提是購買不同的冊,比如買10本第一冊,那是不會有折扣的 買兩本第一冊,一本第二冊,那其中的有一本第一冊是不能享受折扣的。現在需要你設計乙...

程式設計之美 買書問題

今天小夥伴在群裡給出了一道題 分享一道題,有興趣的可以做做哈。假設 冰與火之歌 有五卷,每一捲單獨買是20塊。兩卷連買減5 三卷連買減10 四卷連買減20 五卷連買減25 買相同的卷不打折。比如買兩本卷一,一本卷二,總 是58元。現買了一批書n,計算出它的最低 一看到這道題,瞬間就覺得這麼簡單有什麼...