我知道VFP有一个函数TYPE()能判断某个变量或表达式的数据类型,也可以判断该变量或表达式计算的结果的数据类型,因此问题的关键是如何生成一个表达式,判断它的值是不是数值型,其值是不是24就可以了。比如4个1位数1、2、3、4。如果生成的表达式没有括号的话,这样的表达式是形如1+2+3+4的表达式,其中1、2、3、4的位置可互换;三个加号可换成任意运算符号(+、-、*、/)。如果在表达式中只允许加1对括号的话,可以生成的表达式形式更多,如(1+2)+3+4、1+(2+3)+4、1+2+(3+4)、(1+2+3)+4、1+(2+3+4)等。如果在表达式中允许有2对括号的话,则可生成的表达式有((1+2)+3)+4、(1+2)+(3+4)、(1+(2+3))+4、1+((2+3)+4)。这是该程序的设计思路。
*24点游戏: 任意给定4个1位数,采用+-*/和括号,得到24 BY Tiger5392
THISFORM.GRID1.RECORDSOURCE=NULL
CLOSE ALL
DIMENSION NN(4)
NN(1)=ALLTRIM(STR(THISFORM.TEXT1.VALUE))
NN(2)=ALLTRIM(STR(THISFORM.TEXT2.VALUE))
NN(3)=ALLTRIM(STR(THISFORM.TEXT3.VALUE))
NN(4)=ALLTRIM(STR(THISFORM.TEXT4.VALUE))
DIMENSION FH(6)
FH(1)="+"
FH(2)="-"
FH(3)="*"
FH(4)="/"
FH(5)="("
FH(6)=")"
CREATE TABLE EQ24 (算式 C(11),结果 N(12,4))
FOR I1=1 TO 4
FOR I2=1 TO 4
IF I2=I1
LOOP
ENDIF
FOR I3=1 TO 4
IF I3=I1 OR I3=I2
LOOP
ENDIF
FOR I4=1 TO 4
IF I4=I1 OR I4=I2 OR I4=I3
LOOP
ENDIF
FOR I5=1 TO 4
FOR I6=1 TO 4
FOR I7=1 TO 4
APPEND BLANK &&01------1+2+3+4型
REPLACE 算式 WITH NN(I1)+FH(I5)+NN(I2)+FH(I6)+NN(I3)+FH(I7)+NN(I4)
APPEND BLANK &&02------(1+2)+3+4型
REPLACE 算式 WITH FH(5)+NN(I1)+FH(I5)+NN(I2)+FH(6)+FH(I6)+NN(I3)+FH(I7)+NN(I4)
APPEND BLANK &&03------1+(2+3)+4型
REPLACE 算式 WITH NN(I1)+FH(I5)+FH(5)+NN(I2)+FH(I6)+NN(I3)+FH(6)+FH(I7)+NN(I4)
APPEND BLANK &&04------1+2+(3+4)型
REPLACE 算式 WITH NN(I1)+FH(I5)+NN(I2)+FH(I6)+FH(5)+NN(I3)+FH(I7)+NN(I4)+FH(6)
APPEND BLANK &&05------(1+2+3)+4型
REPLACE 算式 WITH FH(5)+NN(I1)+FH(I5)+NN(I2)+FH(I6)+NN(I3)+FH(6)+FH(I7)+NN(I4)
APPEND BLANK &&06------1+(2+3+4)型
REPLACE 算式 WITH NN(I1)+FH(I5)+FH(5)+NN(I2)+FH(I6)+NN(I3)+FH(I7)+NN(I4)+FH(6)
APPEND BLANK &&07------(1+2)+(3+4)型
REPLACE 算式 WITH FH(5)+NN(I1)+FH(I5)+NN(I2)+FH(6)+FH(I6)+FH(5)+NN(I3)+FH(I7)+NN(I4)+FH(6)
APPEND BLANK &&08------((1+2)+3)+4型