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

        其实网络上都有其他语言的代码,但是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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值