发信人: 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版
      | 
 
 
 |