如何用VB写 求24点或任意值的四则运算 支持负数

作者&投稿:谏莘 (若有异议请与网页底部的电邮联系)
如何用VB做简易的四则运算计算器~

很简单的:窗口放入四个COMMAND控件(Caption属性分别为+、-、X、÷),三个TEXT控件,再放入三个Label控件(Caption属性分别为:操作数1、操作数2和计算结果),窗口的Caption属性改为“四则运算”
代码如下:
Private Sub Command1_Click()
If Val(Text1.Text) + Val(Text2.Text) Int(Val(Text1.Text) + Val(Text2.Text)) Then
Text3.Text = Format(Val(Text1.Text) + Val(Text2.Text), "0.######")
Else
Text3.Text = Val(Text1.Text) + Val(Text2.Text)
End If
End Sub
Private Sub Command2_Click()
If Val(Text1.Text) - Val(Text2.Text) Int(Val(Text1.Text) - Val(Text2.Text)) Then
Text3.Text = Format(Val(Text1.Text) - Val(Text2.Text), "0.######")
Else
Text3.Text = Val(Text1.Text) - Val(Text2.Text)
End If
End Sub
Private Sub Command3_Click()
If Val(Text1.Text) * Val(Text2.Text) Int(Val(Text1.Text) * Val(Text2.Text)) Then
Text3.Text = Format(Val(Text1.Text) * Val(Text2.Text), "0.######")
Else
Text3.Text = Val(Text1.Text) * Val(Text2.Text)
End If
End Sub
Private Sub Command4_Click()
If Val(Text1.Text) / Val(Text2.Text) Int(Val(Text1.Text) / Val(Text2.Text)) Then
Text3.Text = Format(Val(Text1.Text) / Val(Text2.Text), "0.######")
Else
Text3.Text = Val(Text1.Text) / Val(Text2.Text)
End If
End Sub

很简单的:窗口放入四个command控件(caption属性分别为+、-、x、÷),三个text控件,再放入三个label控件(caption属性分别为:操作数1、操作数2和计算结果),窗口的caption属性改为“四则运算”
代码如下:
private
sub
command1_click()
if
val(text1.text)
+
val(text2.text)

int(val(text1.text)
+
val(text2.text))
then
text3.text
=
format(val(text1.text)
+
val(text2.text),
"0.######")
else
text3.text
=
val(text1.text)
+
val(text2.text)
end
if
end
sub
private
sub
command2_click()
if
val(text1.text)
-
val(text2.text)

int(val(text1.text)
-
val(text2.text))
then
text3.text
=
format(val(text1.text)
-
val(text2.text),
"0.######")
else
text3.text
=
val(text1.text)
-
val(text2.text)
end
if
end
sub
private
sub
command3_click()
if
val(text1.text)
*
val(text2.text)

int(val(text1.text)
*
val(text2.text))
then
text3.text
=
format(val(text1.text)
*
val(text2.text),
"0.######")
else
text3.text
=
val(text1.text)
*
val(text2.text)
end
if
end
sub
private
sub
command4_click()
if
val(text1.text)
/
val(text2.text)

int(val(text1.text)
/
val(text2.text))
then
text3.text
=
format(val(text1.text)
/
val(text2.text),
"0.######")
else
text3.text
=
val(text1.text)
/
val(text2.text)
end
if
end
sub

关于二十四点游戏的编程思路与基本算法

漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。

问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
首先穷举的可行性问题。我把表达式如下分成三类——
1、 无括号的简单表达式。
2、 有一个括号的简单表达式。
3、 有两个括号的较复4、 杂表达式。
穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
/* ans[] 用来存放各种排列组合的数组 */
/* c[] 存放四张牌的数组 */
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
/* kans[] 暂存生成的排列组合 */
/* j 嵌套循环的次数 */
int fans(c,k,ans,kans,j)
int j,k[],c[];char ans[],kans[];
{ int i,p,q,r,h,flag,s[4],t[4][4];
for(p=0,q=0;p<4;p++)
{ for(r=0,flag=0;r if(k[p]!=kans[r]) flag++;
if(flag==j) t[j][q++]=k[p];
}
for(s[j]=0;s[j]<4-j;s[j]++)
{ kans[j]=t[j][s[j]];
if(j==3) { for(h=0;h<4;h++)
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
达式中的位置 */
for(h=0;h<3;h++)
symbol(ans,h); /* 在表达式中添加运算符号 */
}
else { j++;
fans(c,k,ans,kans,j);
j--;
}
}
}

正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:

/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
int sans(ans,sy,j,h)
char ans[],sy[];int j,h;
{ int i,p,k[3],m,n; char ktans[20];
for(k[j]=0;k[j]<4;k[j]++)
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
这里的三个运算符号分别存放在1、3、5位*/
if(j==2)
{ ans[5]=sy[k[j]];
/* 此处根据不同的表达式形式再进行相应的处理 */
}
else { j++; sans(ans,sy,j--,h); }
}
}

好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
for(m=0;m<=4;m+=2)
for(n=m+4;n<=8;n+=2)
这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。

综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。

接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。

栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。

那么作为栈的著名应用,表达式的计算可以有两种方法。

第一种方法——
首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
1、 若W为操作数
2、 则将W压入操作数栈OVS
3、 且继续扫描下一个字符
4、 若W为运算符
5、 则根据运算符的性质做相应的处理:
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。

第二种方法——
首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。

那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。

1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
表达式 波兰表达式
A-B AB-
(A-B)*C+D AB-C*D+
A*(B+C/D)-E*F ABCD/+*EF*-
(B+C)/(A-D) BC+AD-/

OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。

至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。

下面给出转换和计算的具体实现程序——

/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
int first(char c)
{ int p;
switch(c)
{ case '*': p=2; break;
case '/': p=2; break;
case '+': p=1; break;
case '-': p=1; break;
case '(': p=0; break;
case '=': p=-1; break;
}
return(p);
}
/* 此函数实现中缀到后缀的转换 */
/* M的值宏定义为20 */
/* sp[]为表达式数组 */
int mid_last()
{ int i=0,j=0; char c,sm[M];
c=s[0]; sm[0]='='; top=0;
while(c!='\0')
{ if(islower(c)) sp[j++]=c;
else switch(c)
{ case '+':
case '-':
case '*':
case '/': while(first(c)<=first(sm[top]))
sp[j++]=sm[top--];
sm[++top]=c; break;
case '(': sm[++top]=c; break;
case ')': while(sm[top]!='(')
sp[j++]=sm[top--];
top--; break;
default :return(1);
}
c=s[++i];
}
while(top>0) sp[j++]=sm[top--];
sp[j]='\0'; return(0);
}
/* 由后缀表达式来计算表达式的值 */
int calc()
{ int i=0,sm[M],tr; char c;
c=sp[0]; top=-1;
while(c!='\0')
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
这样才可以更方便的处理非一位数,
ver数组中存放着这些字母所代替的数*/
else switch(c)
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
case '-': tr=sm[top--]; sm[top]-=tr; break;
case '*': tr=sm[top--]; sm[top]*=tr; break;
case '/': tr=sm[top--];sm[top]/=tr;break;
default : return(1);
}
c=sp[++i];
}
if(top>0) return(1);
else { result=sm[top]; return(0); }
}

这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。

最后我总结了一下这其中容易出错的地方——

1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。

2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。

3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。

4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。

5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。

6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。

7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。

最后,由于此文档并没有在写程序的同时完成,所以难免因为记忆的差错和小弟水平的不足而有不少错误,还望各位批评指正;或者你认为我写得还不够清楚,你也可以给我来信讨论。

楼上的要是问题简单的话,人家也不会出200分,不简单的。

'都好长...好长...
'我也来凑凑热闹.

Option Explicit

Private Sub Command1_Click()
Dim s As String
s = Calc24(-3, 3, 7, 2)
MsgBox s
End Sub
Private Function Calc24(V1 As Integer, V2 As Integer, V3 As Integer, V4 As Integer) As String

Dim i As Integer, a As Integer, b As Integer
Dim Ba As Boolean, Bb As Boolean, Bc As Boolean, Bd As Boolean, Be As Boolean, Bf As Boolean
Dim InV(3) As Integer
Dim InVn(3, 2) As Integer
Dim TmpVa(3) As Integer, TmpVb(3) As Integer, TmpVc(3) As Integer
Dim TmpSa(3) As String, TmpSb(3) As String, TmpSc(3) As String

InVn(0, 0) = V2: InVn(0, 1) = V3: InVn(0, 2) = V4
InVn(1, 0) = V1: InVn(1, 1) = V3: InVn(1, 2) = V4
InVn(2, 0) = V1: InVn(2, 1) = V2: InVn(2, 2) = V4
InVn(3, 0) = V1: InVn(3, 1) = V2: InVn(3, 2) = V3

InV(0) = V1: InV(1) = V2: InV(2) = V3: InV(3) = V4

For i = 0 To 3

Ba = False: Bb = False: Bc = False: Bd = False: Be = False: Bf = False

TmpVa(0) = InV(i) + InVn(i, 0)
TmpVa(1) = InV(i) - InVn(i, 0): Ba = (TmpVa(1) < 0)
TmpVa(2) = InV(i) * InVn(i, 0)
TmpVa(3) = InV(i) / InVn(i, 0): Bb = ((InV(i) Mod InVn(i, 0)) > 0)

TmpSa(0) = InV(i) & "+" & InVn(i, 0)
TmpSa(1) = InV(i) & "-" & InVn(i, 0)
TmpSa(2) = InV(i) & "*" & InVn(i, 0)
TmpSa(3) = InV(i) & "/" & InVn(i, 0)

For a = 0 To 3

If Ba And a = 1 Then Exit For
If Bb And a = 3 Then Exit For

TmpVb(0) = TmpVa(a) + InVn(i, 1)
TmpVb(1) = TmpVa(a) - InVn(i, 1)
TmpVb(2) = TmpVa(a) * InVn(i, 1)
TmpVb(3) = TmpVa(a) / InVn(i, 1)

TmpSb(0) = TmpSa(a) & "+" & InVn(i, 1)
TmpSb(1) = TmpSa(a) & "-" & InVn(i, 1)
If a < 2 Then
TmpSb(2) = "(" & TmpSa(a) & ")*" & InVn(i, 1)
TmpSb(3) = "(" & TmpSa(a) & ")/" & InVn(i, 1)
Else
TmpSb(2) = TmpSa(a) & "*" & InVn(i, 1)
TmpSb(3) = TmpSa(a) & "/" & InVn(i, 1)
End If

Bc = (TmpVb(1) < 0)
Bd = ((TmpVa(a) Mod InVn(i, 1)) > 0)

For b = 0 To 3

If Bc And b = 1 Then Exit For
If Bd And b = 3 Then Exit For

TmpVc(0) = TmpVb(b) + InVn(i, 2)
TmpVc(1) = TmpVb(b) - InVn(i, 2)
TmpVc(2) = TmpVb(b) * InVn(i, 2)
TmpVc(3) = TmpVb(b) / InVn(i, 2)

TmpSc(0) = TmpSb(b) & "+" & InVn(i, 2)
TmpSc(1) = TmpSb(b) & "-" & InVn(i, 2)
If b < 2 Then
TmpSc(2) = "(" & TmpSb(b) & ")*" & InVn(i, 2)
TmpSc(3) = "(" & TmpSb(b) & ")/" & InVn(i, 2)
Else
TmpSc(2) = TmpSb(b) & "*" & InVn(i, 2)
TmpSc(3) = TmpSb(b) & "/" & InVn(i, 2)
End If

Be = (TmpVc(1) < 0)
Bf = ((TmpVb(b) Mod InVn(i, 2)) > 0)

If TmpVc(0) = 24 Then Calc24 = TmpSc(0)
If Be And TmpVc(1) = 24 Then Calc24 = TmpSc(1)
If TmpVc(2) = 24 Then Calc24 = TmpSc(2)
If Bf And TmpVc(3) = 24 Then Calc24 = TmpSc(3)

Next b

Next a

If Calc24 <> "" Then Exit For

Next i

If Calc24 = "" Then Calc24 = "No Result"

End Function

o(∩_∩)o...似乎个位的答案都不是很行啊。

试了一下 支持负数

VERSION 5.00
Begin VB.Form frmMain
BorderStyle = 1 'Fixed Single
Caption = " 24点"
ClientHeight = 4020
ClientLeft = 45
ClientTop = 330
ClientWidth = 5325
Icon = "Form1.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 4020
ScaleWidth = 5325
StartUpPosition = 3 '窗口缺省
Begin VB.Timer t
Interval = 20000
Left = 4440
Top = 2310
End
Begin VB.CommandButton cmdExit
Caption = "退出"
Height = 525
Left = 3330
TabIndex = 6
Top = 3030
Width = 975
End
Begin VB.CommandButton cmdDo
Caption = "求解"
Height = 525
Left = 2160
TabIndex = 1
Top = 3030
Width = 975
End
Begin VB.CommandButton cmdMake
Caption = "出题"
Height = 525
Left = 960
TabIndex = 0
Top = 3030
Width = 975
End
Begin VB.Label lresult
AutoSize = -1 'True
BeginProperty Font
Name = "宋体"
Size = 15.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 450
TabIndex = 7
Top = 1560
Width = 165
End
Begin VB.Label lNumberD
AutoSize = -1 'True
Caption = "0"
BeginProperty Font
Name = "宋体"
Size = 48
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H0000C000&
Height = 960
Left = 4200
TabIndex = 5
Top = 300
Width = 480
End
Begin VB.Label lNumberB
AutoSize = -1 'True
Caption = "0"
BeginProperty Font
Name = "宋体"
Size = 48
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H0080FF80&
Height = 960
Left = 1680
TabIndex = 4
Top = 300
Width = 480
End
Begin VB.Label lNumberC
AutoSize = -1 'True
Caption = "0"
BeginProperty Font
Name = "宋体"
Size = 48
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H0000FF00&
Height = 960
Left = 2940
TabIndex = 3
Top = 300
Width = 480
End
Begin VB.Label lNumberA
AutoSize = -1 'True
Caption = "0"
BeginProperty Font
Name = "宋体"
Size = 48
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00C0FFC0&
Height = 960
Left = 420
TabIndex = 2
Top = 300
Width = 480
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim NumberA, NumberB, NumberC, NumberD As Single
Dim A, B, C, D As Single
Dim Jieguo As Single
Dim ResultExpression As String
Dim i As Integer
Dim Num As Boolean

Sub Kind(i As Integer)
Select Case i
Case 1
A = NumberA: B = NumberB: C = NumberC: D = NumberD
Case 2
A = NumberA: B = NumberB: D = NumberC: C = NumberD
Case 3
A = NumberA: C = NumberB: B = NumberC: D = NumberD
Case 4
A = NumberA: C = NumberB: D = NumberC: B = NumberD
Case 5
A = NumberA: D = NumberB: B = NumberC: C = NumberD
Case 6
A = NumberA: D = NumberB: C = NumberC: B = NumberD

Case 7
B = NumberA: A = NumberB: C = NumberC: D = NumberD
Case 8
B = NumberA: A = NumberB: D = NumberC: C = NumberD
Case 9
B = NumberA: C = NumberB: A = NumberC: D = NumberD
Case 10
B = NumberA: C = NumberB: D = NumberC: A = NumberD
Case 11
B = NumberA: D = NumberB: A = NumberC: C = NumberD
Case 12
B = NumberA: D = NumberB: C = NumberC: A = NumberD

Case 13
C = NumberA: A = NumberB: B = NumberC: D = NumberD
Case 14
C = NumberA: A = NumberB: D = NumberC: B = NumberD
Case 15
C = NumberA: B = NumberB: A = NumberC: D = NumberD
Case 16
C = NumberA: B = NumberB: D = NumberC: A = NumberD
Case 17
C = NumberA: D = NumberB: A = NumberC: B = NumberD
Case 18
C = NumberA: D = NumberB: B = NumberC: A = NumberD

Case 19
D = NumberA: A = NumberB: B = NumberC: C = NumberD
Case 20
D = NumberA: A = NumberB: C = NumberC: B = NumberD
Case 21
D = NumberA: B = NumberB: A = NumberC: C = NumberD
Case 22
D = NumberA: B = NumberB: C = NumberC: A = NumberD
Case 23
D = NumberA: C = NumberB: A = NumberC: B = NumberD
Case 24
D = NumberA: C = NumberB: B = NumberC: A = NumberD
End Select

End Sub

Private Sub cmdDo_Click()
For j = 1 To 30
Select Case j
Case 1
For i = 1 To 1
Call Kind(i)
Jieguo = A + B + C + D
If Jieguo = 24 Then
ResultExpression = A & "+" & B & "+" & C & "+" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 2
For i = 1 To 24
Call Kind(i)
Jieguo = A + B + C - D
If Jieguo = 24 Then
ResultExpression = A & "+" & B & "+" & C & "-" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 3
For i = 1 To 24
Call Kind(i)
Jieguo = A * B + C + D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "+" & C & "+" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 4
For i = 1 To 24
Call Kind(i)
Jieguo = A * B + C - D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "+" & C & "-" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 5
For i = 1 To 24
Call Kind(i)
Jieguo = A * B * C + D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "*" & C & "+" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 6
For i = 1 To 24
Call Kind(i)
Jieguo = A * B * C - D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "*" & C & "-" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 7
For i = 1 To 24
Call Kind(i)
Jieguo = A * B * C * D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "*" & C & "*" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 8
For i = 1 To 24
Call Kind(i)
Jieguo = A * B + C * D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "+" & C & "*" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 9
For i = 1 To 24
Call Kind(i)
Jieguo = A * B - C * D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "-" & C & "*" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 10
For i = 1 To 24
Call Kind(i)
Jieguo = A / B + C + D
If Jieguo = 24 Then
ResultExpression = A & "/" & B & "+" & C & "+" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 11
For i = 1 To 24
Call Kind(i)
Jieguo = A * B / C + D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "/" & C & "+" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 12
For i = 1 To 24
Call Kind(i)
Jieguo = A * B / C - D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "/" & C & "-" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 13
For i = 1 To 24
Call Kind(i)
Jieguo = A * B * C / D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "*" & C & "/" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 14
For i = 1 To 24
Call Kind(i)
Jieguo = A * B / C / D
If Jieguo = 24 Then
ResultExpression = A & "*" & B & "/" & C & "/" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 15
For i = 1 To 24
Call Kind(i)
Jieguo = (A + B) * C / D
If Jieguo = 24 Then
ResultExpression = "(" & A & "+" & B & ")*" & C & "/" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 16
For i = 1 To 24
Call Kind(i)
Jieguo = (A + B) * C * D
If Jieguo = 24 Then
ResultExpression = "(" & A & "+" & B & ")*" & C & "*" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 17
For i = 1 To 24
Call Kind(i)
Jieguo = (A + B) * (C + D)
If Jieguo = 24 Then
ResultExpression = "(" & A & "+" & B & ")*(" & C & "+" & D & ")=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 18
For i = 1 To 24
Call Kind(i)
Jieguo = (A + B) * (C - D)
If Jieguo = 24 Then
ResultExpression = "(" & A & "+" & B & ")*(" & C & "-" & D & ")=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 19
For i = 1 To 24
Call Kind(i)
Jieguo = (A - B) * (C - D)
If Jieguo = 24 Then
ResultExpression = "(" & A & "-" & B & ")*(" & C & "-" & D & ")=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 20
For i = 1 To 24
Call Kind(i)
Jieguo = (A - B) * C / D
If Jieguo = 24 Then
ResultExpression = "(" & A & "-" & B & ")*" & C & "/" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 21
For i = 1 To 24
Call Kind(i)
Jieguo = (A - B) * C * D
If Jieguo = 24 Then
ResultExpression = "(" & A & "-" & B & ")*" & C & "*" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 22
For i = 1 To 24
Call Kind(i)
Jieguo = (A + B + C) * D
If Jieguo = 24 Then
ResultExpression = "(" & A & "+" & B & "+" & C & ")*" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 23
For i = 1 To 24
Call Kind(i)
Jieguo = (A + B + C) / D
If Jieguo = 24 Then
ResultExpression = "(" & A & "+" & B & "+" & C & ")/" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 24
For i = 1 To 24
Call Kind(i)
Jieguo = (A + B - C) * D
If Jieguo = 24 Then
ResultExpression = "(" & A & "+" & B & "-" & C & ")*" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 25
For i = 1 To 24
Call Kind(i)
Jieguo = A * (B + C) + D
If Jieguo = 24 Then
ResultExpression = A & "*(" & B & "+" & C & ")+" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 26
For i = 1 To 24
Call Kind(i)
Jieguo = A * (B - C) + D
If Jieguo = 24 Then
ResultExpression = A & "*(" & B & "-" & C & ")+" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 27
For i = 1 To 24
Call Kind(i)
Jieguo = A * (B + C) - D
If Jieguo = 24 Then
ResultExpression = A & "*(" & B & "+" & C & ")-" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 28
For i = 1 To 24
Call Kind(i)
Jieguo = A * (B - C) - D
If Jieguo = 24 Then
ResultExpression = A & "*(" & B & "-" & C & ")-" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 29
For i = 1 To 24
Call Kind(i)
Jieguo = A + (B + C) / D
If Jieguo = 24 Then
ResultExpression = A & "+(" & B & "+" & C & ")/" & D & "=24"
Num = True
lresult.Caption = ResultExpression
Exit For
End If
Next i
Case 30
ResultExpression = "无解"

Num = True
lresult.Caption = ResultExpression
End Select

If Num = True Then Exit For
Next j

End Sub
Private Sub cmdExit_Click()
End
End Sub
Private Sub cmdMake_Click()
Randomize
NumberA = Int(Rnd * 10) + 1
NumberB = Int(Rnd * 10) + 1
NumberC = Int(Rnd * 10) + 1
NumberD = Int(Rnd * 10) + 1
lNumberA.Caption = NumberA
lNumberB.Caption = NumberB
lNumberC.Caption = NumberC
lNumberD.Caption = NumberD
lresult.Caption = "请按求解键!"
cmdDo.Enabled = True
Num = False

End Sub

Private Sub Form_Load()
cmdDo.Enabled = False
t.Enabled = False
lresult.Caption = "请按出题键!"
Num = False

End Sub


苍南县19294706731: 求算24点的VB程序
褒琼健脾: 定义2个数组,一个算术符号的,一个是0到9的 在用2个for完成,先for算术符号组合,在for数字组合 中间加个if判断=24就输出!

苍南县19294706731: 怎样用vb算24点 -
褒琼健脾: 设第一个数为a(0),第二a(1),第三a(2),第四a(3). Cls '清空屏幕 Dim b,c,d,e As Integer For b = 0 To 3 For c = 0 To 3 For d = 0 To 3 For e = 0 To 3 If b<>c And c<>d And d<>e And e<>b And b<>d And c<>e Then If a(b) + a(c) + a(d) + a(e) = 24 ...

苍南县19294706731: vb编写算24程序 1到10的任意四个数字通过四则运算 算出24 要用穷举法吗 还有更优化的 -
褒琼健脾: 算24最好是穷举法 数字也不多的 如果用随机出四个数的方法也可以 但就是不全面

苍南县19294706731: 如何用vb做24点呢?
褒琼健脾: 不需要那么复杂,系统默认的时间格式就是24小时制,你在窗体里放一个文本标签,名称为Label1,再放一个定时器,时间间隔设置为100,然后在Timer1_Timer()中放这条语句试试:Label1.Caption = Time$ 一个按24小时制显示的小时钟就...

苍南县19294706731: VB怎样编写计算二十四点的程序? -
褒琼健脾: http://www.51dangao.com/24.rar

苍南县19294706731: vb编程中编个算24点的游戏怎么编啊(只要思路( -
褒琼健脾: 第1、3、5、7的空格是放牌的(每空一张牌),而第2、4、6的空格是放加减乘除的符号的(每空一个符号) 好,那么根据数学中的排列组合,4张牌放到4个空格里面有24种不同的排列,把4个符号放到3个空格里面也是有24种不同的排列,那么再把这两个排列再排列的话,就有24*24=576种排列,那么你的程序要做的就是把这576种排列全部算过,结果是不是等于24就OK了,我想程序循环576下应该只要不到1秒的时间吧

苍南县19294706731: 帮个忙 用VB做24点游戏的程序,我一点都不会,,能给个完整的么,谢啦 -
褒琼健脾: 我提供个思路供你参考:假设有四个数:a,b,c,d,先算使a⊙b⊙c⊙d=24(其中⊙代表加,减,乘,除),如果成立则输出. 然后继续算 (a⊙b)⊙c⊙d=24 a⊙(b⊙c)⊙d=24、 (a⊙b)⊙(c⊙d)=24、(a⊙b⊙c)⊙d=24,只要按照这个思路就可以写出来了.

苍南县19294706731: 急求24点游戏的VB.NET代码,很急很急!!请大家多多帮忙!!谢~~~~
褒琼健脾: 这个是24点游戏的VB代码. 希望对你有用哦` ption Explicit Enum CARD_DRAW CARD_DRAW_FACE CARD_DRAW_BACK CARD_DRAW_INVERT End Enum Private Declare Function cdtInit Lib "Cards.dll" ( _ dx As Long, dy As Long) As ...

苍南县19294706731: VB求解 如何随机选取1,2,3,4 四个数中的某一个 -
褒琼健脾: choose函数呀 dim i as integer i=4*rnd+1'生成1-4的随机数 dim Num as double Num=choose(i,50,100,80,500)

苍南县19294706731: 求四个数的最大值用VB写编程如何写? -
褒琼健脾: 定义四个实型变量abcd,定义一个活动实型变量m if a>b; then m=a; else m=b; if c>m; then m=c; else if d>m; then m=d; else m=m; print m; end

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网