穷举法例一:
请你设计一个程序,将1~9这九个数字组成的三个三位的平方数,要求每个数字只准使用一次。
问题分析:
搜索范围:100~999;
题目中要求的是三位数的平方,所以只搜索102~312;
题目要求1~9只用1次,所以排除有重复数字和数字0的平方数;
开辟有21个单元的数组Q(I),用于存放11~31的平方,再开辟有9个单元的数组K(I),每个数组单元代表一位数字;
搜索时,每次选择三个平方数,把这三个平方数的每一位数字存放在相对应的数组单元中,若某个单元的数字大于1,说明有重复数字出现,否则找到问题的解;
为了保证搜索没有遗漏,用一个三重循环来控制选择平方数的顺序;
附Basic程序清单,请你用Pascal编程练习。
CLS
DIM q(21), k(9): s = 0
FOR i = 11 TO 31
x = i * i: GOSUB 3
IF (l1 = l2) OR (l2 = l3) OR (l1 = l3) THEN GOTO 1
s = s + 1: q(s) = x
1 NEXT i
FOR j = 1 TO 9: k(j) = 0: NEXT j
FOR a = 1 TO s - 2
FOR b = a + 1 TO s - 1
FOR c = b + 1 TO s
x = q(a): GOSUB 3
x = q(b): GOSUB 3
x = q(c): GOSUB 3
FOR i = 1 TO 9 : IF k(i) > 1 THEN GOTO 2 : NEXT i
PRINT q(a), q(b), q(c): END
2 FOR j = 1 TO 9: k(j) = 0: NEXT j
NEXT c
NEXT b
NEXT a
END
3 :
x$ = STR$(x)
l1 = VAL(MID$(x$, 2, 1)): k(l1) = k(l1) + 1
l2 = VAL(MID$(x$, 3, 1)): k(l2) = k(l2) + 1
l3 = VAL(MID$(x$, 4, 1)): k(l3) = k(l3) + 1
RETURN
答案:
361 529 784