一个求24点所有可能解的VB源代码及程序实现

来源:互联网 发布:erp软件测试六部曲 编辑:程序博客网 时间:2024/06/05 12:03

        其实网络上都有其他语言的代码,但是VB的不多。网上求一种解的代码多,但是求所有解的代码和程序不多。最近花了2天做了一个求24点所有解的VB小程序,算法无非都是穷举法。我解算的思路如下:

   24点无非下列几种种解法:

1.(a符号b)符号(c符号d)形式   例如:(9-5)*(10-6)

2.((a符号b)符号c)符号d 形式 或者  d符号((a符号b)符号c)例如:((10-2)/2)*6 或者6*((10-2)/2)

3.(a符号(b符号c))符号d 形式 或者  d符号(a符号(b符号c))例如:(8/(4/2))*6或者8/(3-(8/3))

4.  无括号的情况包括在有括号情况里面, 例如4+2*5+10可以解成(4+10)+(2*5)

5. 交换a,b,c,d位置求解即可。

源代码:

Dim daan As Boolean '判定(a+b)+(c+d)是否有解
Dim s(1 To 4) As Integer '输入的四个数
Dim daan1 As Boolean '判定((a+b)+c)+d)是否有解
Dim dyjs As Integer '控制打印列数
Sub shuchu1(a1 As Integer, b1 As Integer, c1 As Integer, d1 As Integer, i1 As Integer, j1 As Integer, k1 As Integer) '子过程,以((a+b)+c)+d输出结果,ijk运算符号,abcd是四个数
    Print "("; "("; a1;
      If i1 = 1 Then
          Print ; "+";
      ElseIf i1 = 2 Then
          Print ; "-";
      ElseIf i1 = 3 Then
          Print ; "×";
      ElseIf i1 = 4 Then
          Print ; "÷";
      End If
    Print ; b1; ")";
      If j1 = 1 Then
          Print ; "+";
      ElseIf j1 = 2 Then
          Print ; "-";
      ElseIf j1 = 3 Then
          Print ; "×";
      ElseIf j1 = 4 Then
          Print ; "÷";
      End If
    Print ; c1; ")";
    If k1 = 1 Then
          Print ; "+";
      ElseIf k1 = 2 Then
          Print ; "-";
      ElseIf k1 = 3 Then
          Print ; "×";
      ElseIf k1 = 4 Then
          Print ; "÷";
      End If
    Print ; d1; "="; 24; Space(10);
    dyjs = dyjs + 1
    If dyjs = 5 Then
     dyjs = 0
     Print
    End If
End Sub
Sub shuchu2(a1 As Integer, b1 As Integer, c1 As Integer, d1 As Integer, i1 As Integer, j1 As Integer, k1 As Integer) '子过程,以d+((a+b)+c)输出结果,ijk运算符号,abcd是四个数
    Print ; d1;
    If k1 = 1 Then
          Print ; "+";
      ElseIf k1 = 2 Then
          Print ; "-";
      ElseIf k1 = 3 Then
          Print ; "×";
      ElseIf k1 = 4 Then
          Print ; "÷";
      End If
    Print "("; "("; a1;
      If i1 = 1 Then
          Print ; "+";
      ElseIf i1 = 2 Then
          Print ; "-";
      ElseIf i1 = 3 Then
          Print ; "×";
      ElseIf i1 = 4 Then
          Print ; "÷";
      End If
    Print ; b1; ")";
      If j1 = 1 Then
          Print ; "+";
      ElseIf j1 = 2 Then
          Print ; "-";
      ElseIf j1 = 3 Then
          Print ; "×";
      ElseIf j1 = 4 Then
          Print ; "÷";
      End If
    Print ; c1; ")"; "="; 24; Space(10);
    dyjs = dyjs + 1
    If dyjs = 5 Then
     dyjs = 0
     Print
    End If
End Sub


Sub shuchu3(a1 As Integer, b1 As Integer, c1 As Integer, d1 As Integer, i1 As Integer, j1 As Integer, k1 As Integer) '子过程,以(a+(b+c))+d输出结果,ijk运算符号,abcd是四个数
    Print "("; a1;
      If j1 = 1 Then
          Print ; "+";
      ElseIf j1 = 2 Then
          Print ; "-";
      ElseIf j1 = 3 Then
          Print ; "×";
      ElseIf j1 = 4 Then
          Print ; "÷";
      End If
    Print ; "("; b1;
      If i1 = 1 Then
          Print ; "+";
      ElseIf i1 = 2 Then
          Print ; "-";
      ElseIf i1 = 3 Then
          Print ; "×";
      ElseIf i1 = 4 Then
          Print ; "÷";
      End If
    Print ; c1; ")"; ")";
    If k1 = 1 Then
          Print ; "+";
      ElseIf k1 = 2 Then
          Print ; "-";
      ElseIf k1 = 3 Then
          Print ; "×";
      ElseIf k1 = 4 Then
          Print ; "÷";
      End If
    Print ; d1; "="; 24; Space(10);
    dyjs = dyjs + 1
    If dyjs = 5 Then
     dyjs = 0
     Print
    End If
End Sub
Sub shuchu4(a1 As Integer, b1 As Integer, c1 As Integer, d1 As Integer, i1 As Integer, j1 As Integer, k1 As Integer) '子过程,以d+(a+(b+c))输出结果,ijk运算符号,abcd是四个数
    Print ; d1;
    If k1 = 1 Then
          Print ; "+";
      ElseIf k1 = 2 Then
          Print ; "-";
      ElseIf k1 = 3 Then
          Print ; "×";
      ElseIf k1 = 4 Then
          Print ; "÷";
      End If
    Print "("; a1;
      If j1 = 1 Then
          Print ; "+";
      ElseIf j1 = 2 Then
          Print ; "-";
      ElseIf j1 = 3 Then
          Print ; "×";
      ElseIf j1 = 4 Then
          Print ; "÷";
      End If
    Print ; "("; b1;
      If i1 = 1 Then
          Print ; "+";
      ElseIf i1 = 2 Then
          Print ; "-";
      ElseIf i1 = 3 Then
          Print ; "×";
      ElseIf i1 = 4 Then
          Print ; "÷";
      End If
    Print ; c1; ")"; ")"; "="; 24; Space(10);
    dyjs = dyjs + 1
    If dyjs = 5 Then
     dyjs = 0
     Print
    End If
End Sub
Sub xingshi1(a As Integer, b As Integer, c As Integer, d As Integer) '判断(a+b)+(c+d)形式是否有解,并输出
Dim result1 As Single, result2 As Single, result As Single '(a+b)=result1,(c+d)=result2
Dim ms As Integer, ls As Integer  '判断a,b,c,d是否相同,减少穷举次数
If a = b Then
  ms = 1
Else
  ms = 2
End If
If c = d Then
  ls = 1
Else
  ls = 2
End If
 For i = 1 To 4
   For j = 1 To 4
     For k = 1 To 4
       For l = 1 To ls
         For m = 1 To ms
           If i = 1 And m = 1 Then result1 = a + b
           If i = 1 And m = 2 Then result1 = b + a
           If i = 2 And m = 1 Then result1 = a - b '交换a,b位置
           If i = 2 And m = 2 Then result1 = b - a '交换a,b位置
           If i = 3 And m = 1 Then result1 = a * b
           If i = 3 And m = 2 Then result1 = b * a
           If i = 4 And m = 1 Then result1 = a / b
           If i = 4 And m = 2 Then result1 = b / a
           If j = 1 And l = 1 Then result2 = c + d
           If j = 1 And l = 2 Then result2 = d + c
           If j = 2 And l = 1 Then result2 = c - d '交换c,d位置
           If j = 2 And l = 2 Then result2 = d - c
           If j = 3 And l = 1 Then result2 = c * d
           If j = 3 And l = 2 Then result2 = d * c
           If j = 4 And l = 1 Then result2 = c / d '交换c,d位置
           If j = 4 And l = 2 Then result2 = d / c '交换c,d位置
           If k = 1 Then
               result = result1 + result2
               If Round(result, 4) = 24 Then
                 daan = True
                 If i = 1 And m = 1 Then Print "("; a; "+"; b; ")"; "+"; '输出a,b
                 If i = 1 And m = 2 Then Print "("; b; "+"; a; ")"; "+";
                 If i = 2 And m = 1 Then Print "("; a; "-"; b; ")"; "+";
                 If i = 2 And m = 2 Then Print "("; b; "-"; a; ")"; "+";
                 If i = 3 And m = 1 Then Print "("; a; "×"; b; ")"; "+";
                 If i = 3 And m = 2 Then Print "("; b; "×"; a; ")"; "+";
                 If i = 4 And m = 1 Then Print "("; a; "÷"; b; ")"; "+";
                 If i = 4 And m = 2 Then Print "("; b; "÷"; a; ")"; "+";
                 If j = 1 And l = 1 Then
                     Print "("; c; "+"; d; ")"; "="; result; Space(10); '输出c,d
                     dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 1 And l = 2 Then
                   Print "("; d; "+"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 1 Then
                   Print "("; c; "-"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 2 Then
                   Print "("; d; "-"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 1 Then
                   Print "("; c; "×"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 2 Then
                   Print "("; d; "×"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 1 Then
                   Print "("; c; "÷"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 2 Then
                   Print "("; d; "÷"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
               End If
           End If
           If k = 2 Then
             result = result1 - result2
               If Round(result, 4) = 24 Then
                 daan = True
                 If i = 1 And m = 1 Then Print "("; a; "+"; b; ")"; "-";
                 If i = 1 And m = 2 Then Print "("; b; "+"; a; ")"; "-";
                 If i = 2 And m = 1 Then Print "("; a; "-"; b; ")"; "-";
                 If i = 2 And m = 2 Then Print "("; b; "-"; a; ")"; "-";
                 If i = 3 And m = 1 Then Print "("; a; "×"; b; ")"; "-";
                 If i = 3 And m = 2 Then Print "("; b; "×"; a; ")"; "-";
                 If i = 4 And m = 1 Then Print "("; a; "÷"; b; ")"; "-";
                 If i = 4 And m = 2 Then Print "("; b; "÷"; a; ")"; "-";
                 If j = 1 And l = 1 Then
                   Print "("; c; "+"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 1 And l = 2 Then
                   Print "("; d; "+"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 1 Then
                   Print "("; c; "-"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 2 Then
                   Print "("; d; "-"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 1 Then
                   Print "("; c; "×"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 2 Then
                   Print "("; d; "×"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 1 Then
                   Print "("; c; "÷"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 2 Then
                   Print "("; d; "÷"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
               End If
           End If
           If k = 3 Then
             result = result1 * result2
              If Round(result, 4) = 24 Then
                 daan = True
                 If i = 1 And m = 1 Then Print "("; a; "+"; b; ")"; "×";
                 If i = 1 And m = 2 Then Print "("; b; "+"; a; ")"; "×";
                 If i = 2 And m = 1 Then Print "("; a; "-"; b; ")"; "×";
                 If i = 2 And m = 2 Then Print "("; b; "-"; a; ")"; "×";
                 If i = 3 And m = 1 Then Print "("; a; "×"; b; ")"; "×";
                 If i = 3 And m = 2 Then Print "("; b; "×"; a; ")"; "×";
                 If i = 4 And m = 1 Then Print "("; a; "÷"; b; ")"; "×";
                 If i = 4 And m = 2 Then Print "("; b; "÷"; a; ")"; "×";
                 If j = 1 And l = 1 Then
                   Print "("; c; "+"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 1 And l = 2 Then
                   Print "("; d; "+"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 1 Then
                   Print "("; c; "-"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 2 Then
                   Print "("; d; "-"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 1 Then
                   Print "("; c; "×"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 2 Then
                   Print "("; d; "×"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 1 Then
                   Print "("; c; "÷"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 2 Then
                   Print "("; d; "÷"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
               End If
           End If
           If (k = 4) And (result2 <> 0) Then
             result = result1 / result2
             If Round(result, 4) = 24 Then
                 daan = True
                 If i = 1 And m = 1 Then Print "("; a; "+"; b; ")"; "÷";
                 If i = 1 And m = 2 Then Print "("; b; "+"; a; ")"; "÷";
                 If i = 2 And m = 1 Then Print "("; a; "-"; b; ")"; "÷";
                 If i = 2 And m = 2 Then Print "("; b; "-"; a; ")"; "÷";
                 If i = 3 And m = 1 Then Print "("; a; "×"; b; ")"; "÷";
                 If i = 3 And m = 2 Then Print "("; b; "×"; a; ")"; "÷";
                 If i = 4 And m = 1 Then Print "("; a; "÷"; b; ")"; "÷";
                 If i = 4 And m = 2 Then Print "("; b; "÷"; a; ")"; "÷";
                 If j = 1 And l = 1 Then
                   Print "("; c; "+"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 1 And l = 2 Then
                   Print "("; d; "+"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 1 Then
                   Print "("; c; "-"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 2 And l = 2 Then
                   Print "("; d; "-"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 1 Then
                   Print "("; c; "×"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 3 And l = 2 Then
                   Print "("; d; "×"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 1 Then
                   Print "("; c; "÷"; d; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
                 If j = 4 And l = 2 Then
                   Print "("; d; "÷"; c; ")"; "="; result; Space(10);
                   dyjs = dyjs + 1
                     If dyjs = 5 Then
                        dyjs = 0
                        Print
                     End If
                 End If
               End If
           End If
         Next m
       Next l
     Next k
   Next j
 Next i
End Sub
Sub xingshi2(a As Integer, b As Integer, c As Integer, d As Integer) '((a+b)+c)+d形式
   Dim result1 As Single, result2 As Single, result As Single
   Dim i As Integer, j As Integer, k As Integer 'i,j,k为运算符
   For i = 1 To 4
       If i = 1 Then
           result1 = a + b 'result1 = a 与 b运算
        ElseIf i = 2 Then
           result1 = a - b
        ElseIf i = 3 Then
           result1 = a * b
        ElseIf i = 4 Then
           result1 = a / b
        End If
     For j = 1 To 4
        If j = 1 Then
           result2 = result1 + c
        ElseIf j = 2 Then
           result2 = result1 - c
        ElseIf j = 3 Then
           result2 = result1 * c
        ElseIf j = 4 Then
           result2 = result1 / c
        End If
       For k = 1 To 4
           If k = 1 Then
               result = result2 + d
               If Round(result, 4) = 24 Then
                 Call shuchu1(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               result = d + result2
               If Round(result, 4) = 24 Then
                 Call shuchu2(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           ElseIf k = 2 Then
               result = result2 - d
               If Round(result, 4) = 24 Then
                 Call shuchu1(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               result = d - result2
               If Round(result, 4) = 24 Then
                 Call shuchu2(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           ElseIf k = 3 Then
               result = result2 * d
               If Round(result, 4) = 24 Then
                 Call shuchu1(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               result = d * result2
               If Round(result, 4) = 24 Then
                 Call shuchu2(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           ElseIf k = 4 Then
               result = result2 / d
               If Round(result, 4) = 24 Then
                 Call shuchu1(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               If result2 <> 0 Then result = d / result2
               If Round(result, 4) = 24 Then
                 Call shuchu2(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           End If
       Next k
    Next j
 Next i
End Sub
Sub xingshi3(a As Integer, b As Integer, c As Integer, d As Integer) '(a+(b+c))+d形式
   Dim result1 As Single, result2 As Single, result As Single
   Dim ms As Integer, ls As Integer, i As Integer, j As Integer, k As Integer
   For i = 1 To 4
       If i = 1 Then
           result1 = b + c
        ElseIf i = 2 Then
           result1 = b - c
        ElseIf i = 3 Then
           result1 = b * c
        ElseIf i = 4 Then
           result1 = b / c
        End If
     For j = 1 To 4
        If j = 1 Then
           result2 = a + result1
        ElseIf j = 2 Then
           result2 = a - result1
        ElseIf j = 3 Then
           result2 = a * result1
        ElseIf j = 4 And result1 <> 0 Then
           result2 = a / result1
        End If
       For k = 1 To 4
           If k = 1 Then
               result = result2 + d
               If Round(result, 4) = 24 Then
                 Call shuchu3(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               result = d + result2
               If Round(result, 4) = 24 Then
                 Call shuchu4(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           ElseIf k = 2 Then
               result = result2 - d
               If Round(result, 4) = 24 Then
                 Call shuchu3(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               result = d - result2
               If Round(result, 4) = 24 Then
                 Call shuchu4(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           ElseIf k = 3 Then
               result = result2 * d
               If Round(result, 4) = 24 Then
                 Call shuchu3(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               result = d * result2
               If Round(result, 4) = 24 Then
                 Call shuchu4(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           ElseIf k = 4 Then
               result = result2 / d
               If Round(result, 4) = 24 Then
                 Call shuchu3(a, b, c, d, i, j, k)
                 daan1 = True
               End If
               If result2 <> 0 Then result = d / result2
               If Round(result, 4) = 24 Then
                 Call shuchu4(a, b, c, d, i, j, k)
                 daan1 = True
               End If
           End If
       Next k
    Next j
 Next i
End Sub
Private Sub Command2_Click() '对输入数据逐一测试(a+b)+(c+d)形式及((a+b)+c)+d)及(a+(b+c))+d)是否有解
Dim jh1 As Integer, jh2 As Integer, jsd1 As Integer, jsd2 As Integer, jhjs As Integer, jhz As Integer 'jhd1,jhd2
Dim sx(1 To 4) As Integer '临时储存4个数数组
jh1 = 2 '初值
jh2 = 3 '初值
jsd1 = 1 '初值
jsd2 = 4 '初值
jhjs = 1 '初值,a,b,c两两相同时记录交换次数
daan = False '初值
daan1 = False '初值
s(1) = Val(Text1)
s(2) = Val(Text2)
s(3) = Val(Text3)
s(4) = Val(Text4)
sx(1) = Val(Text1)
sx(2) = Val(Text2)
sx(3) = Val(Text3)
sx(4) = Val(Text4)
Call xingshi1(s(1), s(2), s(3), s(4)) '测试(a+b)+(c+d)是否有解
If s(1) <> s(2) And s(1) <> s(3) And s(1) <> s(4) And s(2) <> s(3) And s(2) <> s(4) And s(3) <> s(4) Then Call xingshi1(s(4), s(3), s(2), s(1)) '交换a,d是否有解
If s(1) = s(2) Then jsd1 = 2 '如果前两个数相等,交换次数减1
If s(3) = s(4) Then jsd2 = 3 '如果后两个数相等,交换次数减1
For jh1 = 2 To jsd1 Step -1
     For jh2 = 3 To jsd2
         If sx(jh1) <> sx(jh2) Then '交换b与c,b与d,a与c,a与d是否有解
             t = sx(jh2)
             sx(jh2) = sx(jh1)
             sx(jh1) = t
             Call xingshi1(sx(1), sx(2), sx(3), sx(4))
             sx(1) = s(1)
             sx(2) = s(2)
             sx(3) = s(3)
             sx(4) = s(4)
         End If
     Next jh2
  Next jh1
 If s(1) = s(2) And s(1) = s(3) And s(1) = s(4) And s(2) = s(3) And s(2) = s(4) And s(3) = s(4) Then '测试((a+b)+c)+d是否有解,全相等则不需交换
   Call xingshi2(s(4), s(3), s(2), s(1))
  Else
   For jh1 = 1 To 4 'a,b,c依次与d交换,看是否有解
     If (sx(jh1) <> sx(4) And jhz <> sx(jh1)) Or jh1 = 4 Then '与d不同,以前交换记录值不同才进行交换,jh1 = 4时,测试((a+b)+c)+d是否有解
             t = sx(4)
             sx(4) = sx(jh1)
             jhz = sx(jh1)
             sx(jh1) = t
       For jh2 = 1 To 3 'a,b,c相互交换
           If sx(1) = sx(2) And sx(3) = sx(2) Then 'a,b,c均相同不交换
               Call xingshi2(sx(1), sx(2), sx(3), sx(4))
               Exit For
           ElseIf sx(1) = sx(2) And sx(3) <> sx(2) Then 'a,b相同
                 If jhjs = 1 Then '交换1次
                   Call xingshi2(sx(1), sx(2), sx(3), sx(4)) '((a+b)+c)+d
                 End If
                 If jhjs = 2 Then '交换2次
                   Call xingshi2(sx(1), sx(3), sx(2), sx(4)) '((a+c)+b)+d
                 End If
                 If jhjs = 3 Then '交换3次
                   Call xingshi2(sx(3), sx(1), sx(2), sx(4)) '((c+a)+b)+d
                   jhjs = 0 '交换次数清零
                 End If
                 jhjs = jhjs + 1
             ElseIf sx(1) = sx(3) And sx(3) <> sx(2) Then
                 If jhjs = 1 Then
                   Call xingshi2(sx(1), sx(2), sx(3), sx(4))
                 End If
                 If jhjs = 2 Then
                   Call xingshi2(sx(2), sx(3), sx(1), sx(4))
                 End If
                 If jhjs = 3 Then
                   Call xingshi2(sx(3), sx(1), sx(2), sx(4))
                   jhjs = 0
                 End If
                 jhjs = jhjs + 1
              ElseIf sx(2) = sx(3) And sx(1) <> sx(2) Then
                 If jhjs = 1 Then
                   Call xingshi2(sx(1), sx(2), sx(3), sx(4))
                 End If
                 If jhjs = 2 Then
                   Call xingshi2(sx(2), sx(3), sx(1), sx(4))
                 End If
                 If jhjs = 3 Then
                   Call xingshi2(sx(3), sx(1), sx(2), sx(4))
                   jhjs = 0
                 End If
                 jhjs = jhjs + 1
           Else
               If sx(2) <> sx(3) Then
                 t = sx(2)
                 sx(2) = sx(3)
                 sx(3) = t
                 Call xingshi2(sx(1), sx(2), sx(3), sx(4))
               End If
               If sx(1) <> sx(2) Then
                 t = sx(1)
                 sx(1) = sx(2)
                 sx(2) = t
                 Call xingshi2(sx(1), sx(2), sx(3), sx(4))
                End If
           End If
       Next jh2
  End If
       sx(1) = s(1) '还原数组
       sx(2) = s(2)
       sx(3) = s(3)
       sx(4) = s(4)
  Next jh1
End If
  If s(1) = s(2) And s(1) = s(3) And s(1) = s(4) And s(2) = s(3) And s(2) = s(4) And s(3) = s(4) Then
   Call xingshi3(s(4), s(3), s(2), s(1))
  Else
   For jh1 = 1 To 4
     If (sx(jh1) <> sx(4) And jhz <> sx(jh1)) Or jh1 = 4 Then
             t = sx(4)
             sx(4) = sx(jh1)
             jhz = sx(jh1)
             sx(jh1) = t
       For jh2 = 1 To 3
           If sx(1) = sx(2) And sx(3) = sx(2) Then
               Call xingshi3(sx(1), sx(2), sx(3), sx(4))
               Exit For
           ElseIf sx(1) = sx(2) And sx(3) <> sx(2) Then
                 If jhjs = 1 Then
                   Call xingshi3(sx(1), sx(2), sx(3), sx(4))
                 End If
                 If jhjs = 2 Then
                   Call xingshi3(sx(1), sx(3), sx(2), sx(4))
                 End If
                 If jhjs = 3 Then
                   Call xingshi3(sx(3), sx(1), sx(2), sx(4))
                   jhjs = 0
                 End If
                 jhjs = jhjs + 1
             ElseIf sx(1) = sx(3) And sx(3) <> sx(2) Then
                 If jhjs = 1 Then
                   Call xingshi3(sx(1), sx(2), sx(3), sx(4))
                 End If
                 If jhjs = 2 Then
                   Call xingshi3(sx(2), sx(3), sx(1), sx(4))
                 End If
                 If jhjs = 3 Then
                   Call xingshi3(sx(3), sx(1), sx(2), sx(4))
                   jhjs = 0
                 End If
                 jhjs = jhjs + 1
              ElseIf sx(2) = sx(3) And sx(1) <> sx(2) Then
                 If jhjs = 1 Then
                   Call xingshi3(sx(1), sx(2), sx(3), sx(4))
                 End If
                 If jhjs = 2 Then
                   Call xingshi3(sx(2), sx(3), sx(1), sx(4))
                 End If
                 If jhjs = 3 Then
                   Call xingshi3(sx(3), sx(1), sx(2), sx(4))
                   jhjs = 0
                 End If
                 jhjs = jhjs + 1
           Else
               If sx(2) <> sx(3) Then
                 t = sx(2)
                 sx(2) = sx(3)
                 sx(3) = t
                 Call xingshi3(sx(1), sx(2), sx(3), sx(4))
               End If
               If sx(1) <> sx(2) Then
                 t = sx(1)
                 sx(1) = sx(2)
                 sx(2) = t
                 Call xingshi3(sx(1), sx(2), sx(3), sx(4))
                End If
           End If
       Next jh2
  End If
       sx(1) = s(1)
       sx(2) = s(2)
       sx(3) = s(3)
       sx(4) = s(4)
  Next jh1
End If
 If daan = False And daan1 = False Then msg = MsgBox("无法解出答案", okonly, "警告")
End Sub


Private Sub Command3_Click()
s(1) = Val(Text1)
s(2) = Val(Text2)
s(3) = Val(Text3)
s(4) = Val(Text4)
End Sub


Private Sub Command4_Click()
Form1.Cls
End Sub


Private Sub Form_Load()
dyjs = 0
End Sub

0 0
原创粉丝点击