发信人: hunter__fox(雁回西楼)
整理人: foxzz(2003-09-16 22:13:27), 站内信件
|
没事做,做个算24点的程序...呵呵
调用示例:
?N24(1,2,3,4) &&返回.T.,表示这四个数能计算出24
?N24(1,2,3,4,"exp")&&返回一个正确的等式,等号的右边是24
Function N24
Lparameters test1,test2,test3,test4,nret
If Not(parameters() = 5) Then
nret = ""
EndIf
test1 = Alltrim(Str(test1))
test2 = Alltrim(Str(test2))
test3 = Alltrim(Str(test3))
test4 = Alltrim(Str(test4))
Local c1,n1,n2,n3
c1 = "+-*/"
&&生成3个运算符
For n1 = 1 To 4
For n2 = 1 To 4
For n3 = 1 To 4
cEnd = orderNumber(test1,test2,test3,test4,Substr(c1,n1,1),Substr(c1,n2,1),Substr(c1,n3,1))
If Not cEnd == ""
If Lower(AllTrim(nret)) = "exp"
Return cEnd
Else
Return Not(cEnd == "") && ? Not(cEnd == "")
EndIf
EndIf
Next
Next
Next
If Lower(AllTrim(nret)) = "exp"
Return ""
Else
Return .F.
EndIf
EndFunc
Function orderNumber&&对四个数字变换排列
Lparameters p1,p2,p3,p4,c1,c2,c3
Local anp[4]
Local n1,n2,n3,n4
anp[1]=p1
anp[2]=p2
anp[3]=p3
anp[4]=p4
For n1 = 1 To 4
For n2 = 1 To 4
For n3 = 1 To 4
For n4 = 1 To 4
If n2!=n1 And n3!=n1 And n3!=n2 And n4!=n1 And n4!=n2 And n4!=n3
cret = createexp(anp[n1],anp[n2],anp[n3],anpv[n4],c1,c2,c3)
If Not cret == ""
Return cret
EndIf
EndIf
Next
Next
Next
Next
Return ""
EndFunc
Function createexp&&11种加括号的方式
Lparameters np1,np2,np3,np4,cp1,cp2,cp3
If callexp(np1+cp1+np2+cp2+np3+cp3+np4+"=24") = .T.
Return np1+cp1+np2+cp2+np3+cp3+np4+"=24"
EndIf
If callexp(np1+cp1+"("+np2+cp2+np3+cp3+np4+")=24") = .T.
Return np1+cp1+"("+np2+cp2+np3+cp3+np4+")=24"
EndIf
If callexp(np1+cp1+np2+cp2+"("+np3+cp3+np4+")=24") = .T.
Return np1+cp1+np2+cp2+"("+np3+cp3+np4+")=24"
EndIf
If callexp(np1+cp1+"("+np2+cp2+np3+")"+cp3+np4+"=24") = .T.
Return np1+cp1+"("+np2+cp2+np3+")"+cp3+np4+"=24"
EndIf
If callexp("("+np1+cp1+np2+")"+cp2+np3+cp3+np4+"=24") = .T.
Return "("+np1+cp1+np2+")"+cp2+np3+cp3+np4+"=24"
EndIf
If callexp("("+np1+cp1+np2+cp2+np3+")"+cp3+np4+"=24") = .T.
Return "("+np1+cp1+np2+cp2+np3+")"+cp3+np4+"=24"
EndIf
If callexp(np1+cp1+"(("+np2+cp2+np3+")"+cp3+np4+")=24") = .T.
Return np1+cp1+"(("+np2+cp2+np3+")"+cp3+np4+")=24"
EndIf
If callexp(np1+cp1+"("+np2+cp2+"("+np3+cp3+np4+"))=24") = .T.
Return np1+cp1+"("+np2+cp2+"("+np3+cp3+np4+"))=24"
EndIf
If callexp("("+np1+cp1+np2+")"+cp2+"("+np3+cp3+np4+")=24") = .T.
Return "("+np1+cp1+np2+")"+cp2+"("+np3+cp3+np4+")=24"
EndIf
If callexp("(("+np1+cp1+np2+")"+cp2+np3+")"+cp3+np4+"=24") = .T.
Return "(("+np1+cp1+np2+")"+cp2+np3+")"+cp3+np4+"=24"
EndIf
If callexp("("+np1+cp1+"("+np2+cp2+np3+"))"+cp3+np4+"=24") = .T.
Return "("+np1+cp1+"("+np2+cp2+np3+"))"+cp3+np4+"=24"
EndIf
Return ""
EndFunc
Function callexp&&验证表表式是否正确,因为可能出现除以0的错误,所以修改On Error
Lparameters cexp
On Error lreturn = .F.
lreturn = &cexp
On Error
Return lreturn
EndFunc
---- 作者:hunter__fox【雁回西楼】
来源:网易虚拟社区广州站 VFP版
|
|