回 帖 发 新 帖 刷新版面

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

原始的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个回复)

沙发

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

板凳

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

3 楼

楼上的问题,能不能每行都写起注释啊,我是菜鸟 有些地方不是很清楚~~。谢谢了~~~

4 楼

本来想给游戏之王10分的,可惜你是完全抄袭别人的,想得分是做梦!!!

5 楼

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
END

SUB WSY (Z)
T = (S + M - 1) MOD Z
IF T >= K THEN S = T: Z = 0 ELSE Z = -1
END SUB

6 楼

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

SUB JX (Z)
T = (S + M - 1) MOD Z
IF T >= K THEN S = T: Z = 0 ELSE Z = -1
END SUB


7 楼

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

SUB JX (Z)
T = (S + M - 1) MOD Z
IF T >= K THEN S = T: Z = 0 ELSE Z = -1
END SUB

8 楼

楼上的我没叫你把过程打出来呀,自作多情.

9 楼

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

10 楼

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

我来回复

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