本题难点有二一是如何求下一出圈人的位置二是某人出圈后对该人的位置如何处理
按题中要求从第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)
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []