回 帖 发 新 帖 刷新版面

主题:请MOZ来解决“猴子选大王”这道题

有n个猴子选大王,先从头到尾1至3报数,报到3的猴子推出,报至尾后,再从尾到头1至3报数,报到3的猴子退出……依次类推,当剩下两只猴子时,报1的为大王,问:若想当大王,应站在什么位置。
输入: 整数n(猴子的只数,n<=60000)
输出: 想当大王应站的位置
样例输入:
10
样例输出:
8

回复列表 (共19个回复)

沙发

CLS
INPUT N, M
DIM A(N)
FOR I = 1 TO N: A(I) = 1: NEXT
C = N
DO UNTIL C = 1
FOR I = 1 TO N
S = S + A(I)
IF S = M THEN C = C - 1: S = 0: A(I) = 0: PRINT I
NEXT
LOOP
FOR I = 1 TO N
IF A(I) = 1 THEN PRINT I
NEXT

N是人数,M是相隔的数
在本题中输入3

板凳


CLS
INPUT n
FOR i = 1 TO n: a(i) = 1: NEXT
FOR i = 1 TO n - 1
l = 0
DO
s = s + 1: IF s > n THEN s = 1
l = l + a(s)
LOOP UNTIL l = 3
a(s) = 0
NEXT
PRINT s

3 楼


少写了DIM a(n)

4 楼

2楼把问题想得太简单了.得出的结果好像也不对吧.

[color=ff00ff] 报至尾后,再从尾到头1至3报数 [/color]
题意是不是"报到尾后,再从尾 [color=0000ff] 开始 [/color] 到头1到3报数?

如果我没有理解错的话,那么1楼的代码也忽略了从后面开始数的处理,
运行一下1楼的代码输入10得出的结果好像也不是8,

我整理了一下思路,觉得逆向思维值得推荐,得出的结果是:
f( 10 ) = 8
f( 6万 ) = 23863
f( 20亿 ) = 888465088
还请楼主拿给老师让老师看看.有时间也让老师验证一下看对不对,呵呵,
至于代码的原理以及处理的过程,呵呵,你们有时间自己慢慢看看看能不能理解,
我反正是看不懂.就算是我自己写的,我再回头看也都会头疼了.

input n&
dim a&(52)
do until n&<3
   c&=c&+1
   a&(c&)=n&\3
   n&=n&-a&(c&)
loop
l&=1
for i&=c& to 1 step-1
    n&=l&+l&\2
    l&=r&+a&(i&)-l&\2
    r&=n&
next
print r&+1

回头一看,没想到是这么几行代码就解决了,呵呵.QB就是好,(顺便卖卖广告)

5 楼

有点难看,还是默认变量简洁一点

deflng a-z
input n
dim a(52)
do until n < 3
   c = c + 1
   a(c) = n \ 3
   n = n - a(c)
loop
p = 1
for i = c to 1 step -1
    n = p + p \ 2
    p = q + a(i) - p \ 2
    q = n
next
print q + 1

6 楼

CLS
INPUT N
DIM H(N)
DO
W = W + 1: K = 0
IF W MOD 2 = 1 THEN A = 1: B = N: C = 1 ELSE A = N: B = 1: C = -1
FOR I = A TO B STEP C
IF H(I) = 1 THEN 10
IF S = N - 2 THEN PRINT I: END
K = K + 1: IF K MOD 3 = 0 THEN H(I) = 1: S = S + 1
10 NEXT I
LOOP
END
我相信一定是对的哦!!!

7 楼

楼上的程序的确是对的,但一些习惯建议改进一下.

1. 把 if 块使用明确一些
2. 避免使用行号跳转之类的东西
3. 少用分号,只能显示少几行,但理解上会有点问题
A. 另外,好像算不到六万.因为占用的数组内存较大,已经溢出QB的限制了,
B. 值得赞扬的是它完全是按照题目的要求来实现每步处理,而且还比较高效的,
C. 如果真的是你自己想到的自己写出来的,那么,要赞你一个了.

8 楼

我以前也不会这道题,(总是显示“Subscript out of range”,一检查,i要么是n+1,要么是-1)谢谢你们的指点!!!!!!!!!!!!!!!!!!!!!!!!(省略10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000个!)

9 楼

楼上那些零能不能用 10^433 代替?
再加多几个 ^ 号都没问题的.

10 楼

CLS
INPUT N
DIM M(N)
DO
X = X + 1
IF X MOD 2 <> 0 THEN A = 1: B = N: C = 1 ELSE A = N: B = 1: C = -1
J = 0
FOR I = A TO B STEP C
IF M(I) = 1 THEN 10
IF T = N - 2 THEN PRINT I: END
J = J + 1
IF J MOD 3 = 0 THEN M(I) = 1: T = T + 1
10 NEXT I
LOOP
END

我来回复

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