精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖源码共赏〗>>计算 24 点

主题:计算 24 点
发信人: 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
请来VFP版   

[关闭][返回]