回 帖 发 新 帖 刷新版面

主题:好难呀!!!哪位编程高手帮忙解一下!!!!

原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。
     从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,
     数到第m个人又出列,…,如此反复直到所有的人全部出列为止。
     比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
     现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。
     我们希望求出m的最小值,使得最先出列的k个人都是坏人。
     输入:仅有的一个数字是k(0 < k <14)。
     输出:使得最先出列的k个人都是坏人的m的最小值。
     输入样例:4
     输出样例:30
[em18][em18][em18][em18][em18][em18][em18][em18]

回复列表 (共13个回复)

11 楼

cls
input k:m=k
do
m=m+1:s=0
for i=1 to k
n=k*2+1-i
t=(s+m-1) mod n
if t>=k then s=t:p=0 else p=1
if p then 10
next i:exit do
10 loop
? m
end

12 楼

cls
input k:m=k
do
m=m+1:s=0
for i=1 to k
n=k*2+1-i
t=(s+m-1) mod n
if t>=k then s=t:p=0 else p=1
if p then 10
next i:exit do
10 loop
print m
end

13 楼

DECLARE SUB WSY (Z)
DIM SHARED S, K, M
CLS
INPUT K
WHILE F = 0
 F = -1: S = 0
 FOR I = 0 TO K - 1
  N = 2 * K - I
  CALL WSY(N)
  IF N = -1 THEN F = 0: M = M + 1: EXIT FOR
 NEXT I
WEND
PRINT M
DIM A(2 * K)
S = 0
20 FOR I = 1 TO 2 * K
 IF A(I) > 0 THEN 10
 W = W + 1
 IF W = M THEN S = S + 1: A(I) = 1: W = 0: PRINT I;
10 NEXT I
IF S < K THEN 20

我来回复

您尚未登录,请登录后再回复。点此登录或注册