大榕树 \ Pascal语言 \ Pascal练习

组合三位平方数

原文链接:http://www.mydrs.org/program/list.asp?id=233

穷举法

例一:

请你设计一个程序,将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

作者:
来源:网络之家
时间:2001-10-06

上一篇:第五届分区联赛普及组复赛
下一篇:埃及分数之和

大榕树 版权所有 ©1999-2006