level 8
1.
幻方(奇数阶偶数阶通用)
CLS
DO
INPUT n
LOOP UNTIL n > 2 AND n < 21
DIM a(n, n)
a$ = STRING$(LEN(STR$(n * n)), "#")
IF n MOD 2 <> 0 THEN
p = n \ 2 + 1
a(1, p) = 1
i1 = 1
j1 = p
i = 1
DO
i2 = i1: j2 = j1
i1 = i1 - 1
IF i1 < 1 THEN i1 = n
j1 = j1 + 1
IF j1 > n THEN j1 = 1
IF a(i1, j1) <> 0 THEN
i1 = i2 + 1
IF i1 > n THEN i1 = 1
j1 = j2
END IF
i = i + 1
a(i1, j1) = i
LOOP UNTIL i = n * n
ELSE
FOR i = 1 TO n
FOR j = 1 TO n
s = s + 1
a(i, j) = s
NEXT j
NEXT i
FOR j = 1 TO n / 2
p = p + 1
b = n - p
FOR i = 1 TO n
IF i <> j AND i + j <> n + 1 THEN
SWAP a(i, j), a(j + b, i + b)
END IF
b = b - 1
NEXT i
NEXT j
END IF
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING a$; a(i, j);
NEXT j
PRINT
NEXT i
END
2012年08月21日 14点08分
2
level 8
第一题解释:
因为奇数阶幻方课本上有介绍规律,所以编程起来比较容易;
不过我又发现了偶数阶的幻方的规律!
因为偶数阶幻方有这样一个规律——
比如说四阶,先把所有的按顺序填好。
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
然后对角线的1,6,11,16,4,7,10,13不动
其他的和相对的数对调:2和15,3和14,5和12,9和8
最后答案就是:
1 15 14 4
12 6 7 9
8 10 11 5
13 3 2 16
可以先全部按顺序排好然后对调。
4阶幻方如下:
1,1 1,2 1,3 1,4
2,1 2,2 2,3 2,4
3,1 3,2 3,3 3,4
4,1 4,2 4,3 4,4
需要对调的是:
第一列有2,1——3,4
3,4=(1+2),(2+2)
3,1——2,4
2,4=(1+1),(3+1)
第二列有1,2——4,3
4,3=(2+2),(1+2)
4,2——1,3
1,3=(2+-1),(4+-1)
按半边算,先把i和j调换,然后要换的就是(j+x),(i+x)
x在第一列的第一行为3,每往下移一行就-1;
x在第二列的第一行为2,每往下移一行就-1。
其他偶数阶幻方也有这个特征。
2012年08月21日 14点08分
3
level 8
2.双蝶飞舞
CLS
FOR I=1 TO 10000
IF I MOD 2=0 THEN
PRINT TAB(I) " \|*| /"
PRINT TAB(i)" \|=|/"
PRINT TAB(I)"----|||----"
PRINT TAB(I)" /|=|\"
PRINT TAB(I)" / |*| \"
ELSE
PRINT TAB(I-11);" \ * /"
PRINT TAB(I-11);" \|/"
PRINT TAB(I-11);" /|\"
PRINT TAB(I-11);" / * \"
END IF
FOR J=1 TO 600000:NEXT
NEXT I
END
2012年08月21日 14点08分
4
level 8
3.二进制转十进制
CLS
DIM t AS DOUBLE
INPUT n$, s
IF s < 2 OR s <> INT(s) OR s > 16 THEN 1
DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
l = LEN(n$): DIM a(l): n$ = UCASE$(n$)
FOR i = 1 TO l
m$ = MID$(n$, i, 1)
f = 0
FOR j = 1 TO s
READ k$
IF k$ = m$ THEN f = 1: EXIT FOR
NEXT j: RESTORE
IF f = 0 THEN PRINT "ERROR": END
IF ASC(k$) > 57 THEN a(i) = ASC(k$) - 55 ELSE a(i) = VAL(k$)
NEXT i
r = 0: t = 0
FOR i = l TO 1 STEP -1
t = t + a(i) * s ^ r: r = r + 1
NEXT i
2 INPUT p
IF p < 2 OR p <> INT(p) OR p > 16 THEN 2
DO UNTIL t = 0
a$ = LTRIM$(STR$(t - INT(t / p) * p)) + a$
t = INT(t / p)
LOOP
PRINT "("; n$; ")"; s; "= ( "; a$; " )"; p
END
2012年08月21日 14点08分
6
level 8
4.石头剪子布
CLS
INPUT "end or start", x$
WHILE x$ <> "end" AND a$ <> "end"
INPUT "What are you? rock, scissors, cloth? ", a$
IF a$ = "scissors" THEN
a = 1
END IF
IF a$ = "rock" THEN
a = 2
END IF
IF a$ = "cloth" THEN
a = 3
END IF
RANDOMIZE TIMER
b = INT(RND * 3) + 1
IF a = b THEN
PRINT "Draw"
END IF
IF a = 1 AND b = 2 THEN PRINT "You lose the"
IF a = 1 AND b = 3 THEN PRINT "You win"
IF a = 2 AND b = 1 THEN PRINT "You win"
IF a = 2 AND b = 3 THEN PRINT "You lose the"
IF a = 3 AND b = 1 THEN PRINT "You lose the"
IF a = 3 AND b = 2 THEN PRINT "You win"
WEND
END
2012年08月21日 14点08分
7
level 8
5.将不超过5位的十六进制正整数转换成十进制数
CLS
INPUT N$
FOR I=LEN(N$) TO 1 STEP -1
A$=MID$(N$,LEN(N$)+1-I,1)
IF ASC(A$)>57 THEN A=ASC(A$)-55 ELSE A=VAL(A$)
X=X+A*16^(I-1)
NEXT I
PRINT X
END
2012年08月22日 13点08分
8