楼上的,你有电脑算得快;
附,我的原代码
DECLARE SUB cai ()
DECLARE SUB check (ia!, ib!)
DECLARE SUB fill ()
'---------------------LOADING-------------------
CLS
DIM SHARED caiz(1 TO 4) AS INTEGER
DIM SHARED kngs AS INTEGER: kngs = 5040
DIM SHARED knsz(5040, 4) AS INTEGER
DIM c AS INTEGER
CALL fill
'----------------------main---------------------
lcai: CALL cai
INPUT "How many A"; ia
INPUT "How many B"; ib
CALL check(ia, ib)
c = kngs
IF c > 1 THEN PRINT "I Can't Guess~~Please input more infos.": GOTO lcai
IF c = 1 THEN PRINT "I KNOW!! The number is"; knsz(1, 1); knsz(1, 2); knsz(1, 3); knsz(1, 4)
IF c < 1 GOTO ted
ted: END
SUB cai
DIM s AS INTEGER
RANDOMIZE TIMER
rc: s = INT(RND(1) * kngs)
IF s = 0 THEN GOTO rc
PRINT "Is it"; knsz(s, 1); knsz(s, 2); knsz(s, 3); knsz(s, 4); "?"; " "; INT(1 / kngs * 100); "%"
caiz(1) = knsz(s, 1): caiz(2) = knsz(s, 2): caiz(3) = knsz(s, 3): caiz(4) = knsz(s, 4)
END SUB
SUB check (ia, ib)
DIM v, pr2, x, y, i, a, b AS INTEGER
v = kngs
pr2 = 1
'------------------------------------------------------------------
FOR i = 1 TO v
FOR x = 1 TO 4
FOR y = 1 TO 4
IF caiz(x) <> knsz(i, y) THEN GOTO ny
IF x = y THEN a = a + 1 ELSE b = b + 1
ny: NEXT y
nx: NEXT x
'--------------
IF ia = a AND ib = b THEN
knsz(pr2, 1) = knsz(i, 1): knsz(pr2, 2) = knsz(i, 2): knsz(pr2, 3) = knsz(i, 3): knsz(pr2, 4) = knsz(i, 4): pr2 = pr2 + 1
ELSE
kngs = kngs - 1
END IF
'--------------
a = 0: b = 0
IF kngs < 1 THEN PRINT "Your input are wrong!": GOTO ed
NEXT i
'-----------------------------------------------------------------
ed: END SUB
SUB fill
DIM pr, q, b, s, g AS INTEGER
pr = 1
FOR g = 0 TO 9
FOR s = 0 TO 9
IF s = g THEN GOTO ns
FOR b = 0 TO 9
IF b = s OR b = g THEN GOTO nb
FOR q = 0 TO 9
IF q = b OR q = s OR q = g THEN GOTO nq
knsz(pr, 1) = q: knsz(pr, 2) = b: knsz(pr, 3) = s: knsz(pr, 4) = g
pr = pr + 1
nq: NEXT q
nb: NEXT b
ns: NEXT s
NEXT g
END SUB