1 | 題目
把長(zhǎng)度為n的繩子剪成m段(n>1,m>1)泌辫,每段繩子的長(zhǎng)度記為k[1]、k[2]松忍、...、k[m]筷厘,求剪切后的各段繩子的長(zhǎng)度的最大乘積是多少鸣峭?例如:繩子長(zhǎng)度為8時(shí),剪成2土汽、3音虹、3三段得到的乘積最大穴示,值為18。
2 | 設(shè)計(jì)分析
盡可能將繩子以長(zhǎng)度3等分為多段時(shí)次新,乘積最大爽步。
剪切原則:
最優(yōu)3:把繩子盡可能剪切為多個(gè)長(zhǎng)度為3的片段,留下最后一段繩子的長(zhǎng)度可能為0傲枕、1婉肆、2三種情況。
次優(yōu)2:若最后一段繩子長(zhǎng)度為2跪消,則保留,不再拆分為1+1差讼。
最差1:若最后一段繩子長(zhǎng)度為1准魁,則應(yīng)把一份3+1替換為2+2,因?yàn)?*2>3*1赫斥。
3 | 創(chuàng)建功能或功能塊
創(chuàng)建功能塊FB卤竭,命名為“CutRopeGreedy”。
4 | 定義接口變量
具體接口變量定義見(jiàn)下圖:
定義整型輸入變量length硼婿,繩子的長(zhǎng)度锌半;
定義整型輸出變量result,剪切后各段乘積的最大值寇漫;
定義整型靜態(tài)變量statNumOf3刊殉,以長(zhǎng)度3等分的取整段數(shù)。
5 | 程序代碼
編寫程序代碼州胳。如下圖:
繩子長(zhǎng)度分別為1记焊、2、3栓撞、4時(shí)根據(jù)推論結(jié)果直接輸出并返回遍膜。利用FOR循環(huán)求各段乘積,循環(huán)次數(shù)為3的段數(shù)瓤湘,然后乘以剪切剩余的長(zhǎng)度值瓢颅。
6 | 代碼測(cè)試
在循環(huán)OB中調(diào)用FB-“CutRopeGreedy”,調(diào)用時(shí)會(huì)自動(dòng)創(chuàng)建背景數(shù)據(jù)塊弛说,命名為“InstCutRopeGreedy”挽懦,該背景數(shù)據(jù)塊可以用來(lái)監(jiān)視和修改數(shù)據(jù)。轉(zhuǎn)至在線并監(jiān)控程序惰衬。如下圖:
輸入繩子的長(zhǎng)度8铡碧,得到各段的乘積最大值為18。