本題難點有二一是如何求下一出圈人的位置二是某人出圈後對該人的位置如何處理
按題中要求從第s個人開始報數報到第m個人此人出圈n個人圍成一圈可看作環狀則下個出圈人其位置是(s+m)%nn是人數是個變量出圈一人減算法中用i表示對第二個問題算法中用出圈人後面人的位置依次前移並把出圈人的位置(下標)存放到當時最後一個人的位置(下標)算法最後打印出圈人的順序
()(s+m) MOD i //計算出圈人s
()s:=i //若s=說明是第i個人出圈(i%i=)
()s TO i //從s到i依次前移使人數減並將出圈人放到當前最後一個位置A[i]=w
若第n件物品能放入背包則問題變為能否再從n件物品中選出若干件放入背包(這時背包可放入物品的重量變為sw[n])若第n件物品不能放入背包則考慮從n件物品選若干件放入背包(這時背包可放入物品仍為s)若最終s=則有一解否則若s<或雖然s>但物品數n<則無解
()sw[n]n //Knap(sw[n]n)=true
()sn // Knap←Knap(sn)
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23046.html