主题:好难呀!!!哪位编程高手帮忙解一下!!!!
Lovely哆啦
[专家分:1360] 发布于 2007-03-26 11:59:00
原始的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个回复)
沙发
chyx [专家分:450] 发布于 2007-03-27 17:28:00
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
板凳
游戏之王 [专家分:540] 发布于 2007-03-29 18:34:00
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 楼
luohaihui [专家分:10] 发布于 2007-03-30 10:40:00
楼上的问题,能不能每行都写起注释啊,我是菜鸟 有些地方不是很清楚~~。谢谢了~~~
4 楼
Lovely哆啦 [专家分:1360] 发布于 2007-03-30 21:37:00
本来想给游戏之王10分的,可惜你是完全抄袭别人的,想得分是做梦!!!
5 楼
黑白猪-- [专家分:420] 发布于 2007-04-01 16:39:00
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 楼
爱丽斯LING [专家分:560] 发布于 2007-04-01 16:56:00
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 楼
蓝莎菲莹 [专家分:370] 发布于 2007-04-01 16:56:00
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 楼
Lovely哆啦 [专家分:1360] 发布于 2007-04-04 11:54:00
楼上的我没叫你把过程打出来呀,自作多情.
9 楼
随便你好 [专家分:530] 发布于 2007-04-04 18:09:00
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 楼
小精灵LS [专家分:580] 发布于 2007-04-05 17:23:00
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
我来回复