24点的算法

2016-01-29 13:45 8 1 收藏

24点的算法,24点的算法

【 tulaoshi.com - ASP.NET 】

    首先,我们先看看这个游戏的规则,给出4个1-9之间的自然数,例如:1,5,5,5(这是很经典的一个例子哦 ^_^)。在1,5,5,5中间用+、-、*、/来运算后得到24这个数。每个数只能使用一次。如果没有计算过的基本都会被难住吧。哈哈,答案是 5*(5-1/5)。是不是很经典呢?和它类似的还有3,3,8,8。

    下面我们来看具体算法。一般我们考虑这样的问题的时候,都是直接写一个超大的select来判断。但重复性的工作是最无聊的!!我们来分析一下这个简单的游戏规则就可以找到一个简单的方法。

    例如:4个数A、B、C、D,我们可以用F(A,B,C,D)=24来表示。那么。我们就可以把函数F拆解成F1(B,C,D)=P1(24,A)。(意思是:B,C,D之间的四则运算可以得到A和24之间的四则运算结果)。那么F1又可以继续拆解为C和D之间的四则运算关系得到结果后再和B来一次四则运算结果。这样,就可以得到很简单的一个数组6*6*6=216种结果而已。当然,这是A,B,C,D顺序固定的组合,那么把A,B,C,D换个位置,又一种组合。所以,所有的结果有6*6*6*12种。但,我们还是忽略了一种情况:A和B的值与C和D的值再进行四则运算,那么我们还需要再加一组6*6*6就可以了。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

    好了,不多说了,大家自己看下面的代码吧。

'--------------------------------计算24的算法---------------------------
'        算法作者:CSDN(penguinMII)--企鹅
'        开发时间:2005-3-23
'        如有引用此算法请保留此信息
'-----------------------------------------------------------------------

'关于F1(F2(F3(a1,a2),a3),a4)的变量定义
Dim f_f(0 To 5) As Double               '2个数之间运算后的6种结果
Dim s_s(0 To 5) As String               '2个数之间运算后的表达式
Dim f_f_f(0 To 5) As Double             '第3个数和上面2数运算后的结果
Dim s_s_s(0 To 5) As String             '第3个数和上面2数运算后的表达式
Dim f_f_f_f(0 To 5) As Double           '第4个数和上面3数运算后的结果
Dim s_s_s_s(0 To 5) As String           '第4个数和上面3数运算后的结果
'关于F1(F2(a1,a2),F3(a3,a4))的变量定义
Dim f_f1(0 To 5) As Double              '第3个数第4个数运算结果
Dim s_s1(0 To 5) As String              '第3个数第4个数运算后的表达式
Dim f_f2(0 To 5) As Double              '第1、2数和第3、4个数运算后的结果
Dim s_s2(0 To 5) As String              '第1、2数和第3、4个数运算后的表达式

Sub ff2(x As Double, y As Double, sx As String, sy As String)
On Error Resume Next
f_f2(0) = x + y
s_s2(0) = "(" + sx + "+" + sy + ")"
f_f2(1) = x - y
s_s2(1) = "(" + sx + "-" + sy + ")"
f_f2(2) = y - x
s_s2(2) = "(" + sy + "-" + sx + ")"
f_f2(3) = x * y
s_s2(3) = "(" + sx + "*" + sy + ")"
f_f2(4) = x / y
s_s2(4) = "(" + sx + "/" + sy + ")"
f_f2(5) = y / x
s_s2(5) = "(" + sy + "/" + sx + ")"

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

End Sub

Sub ff1(x As Integer, y As Integer)
On Error Resume Next
f_f1(0) = x + y
s_s1(0) = "(" + CStr(x) + "+" + CStr(y) + ")"
f_f1(1) = x - y
s_s1(1) = "(" + CStr(x) + "-" + CStr(y) + ")"
f_f1(2) = y - x
s_s1(2) = "(" + CStr(y) + "-" + CStr(x) + ")"
f_f1(3) = x * y
s_s1(3) = "(" + CStr(x) + "*" + CStr(y) + ")"
f_f1(4) = x / y
s_s1(4) = "(" + CStr(x) + "/" + CStr(y) + ")"
f_f1(5) = y / x
s_s1(5) = "(" + CStr(y) + "/" + CStr(x) + ")"

End Sub

Sub ff(x As Integer, y As Integer)
On Error Resume Next
f_f(0) = x + y
s_s(0) = "(" + CStr(x) + "+" + CStr(y) + ")"
f_f(1) = x - y
s_s(1) = "(" + CStr(x) + "-" + CStr(y) + ")"
f_f(2) = y - x
s_s(2) = "(" + CStr(y) + "-" + CS

来源:http://www.tulaoshi.com/n/20160129/1491403.html

延伸阅读
罩杯怎么算 罩杯的计算公式是:罩杯尺寸=胸上围尺寸-胸下围尺寸 文胸尺码 把软尺放在乳房下围,绕过身体一周,所得的尺寸(以最接近0或5厘米)就是文胸尺码。文胸尺码对照表也称文胸尺寸对照表,胸罩尺寸对照表,根据国际标准规定,罩杯怎么算请看下面的罩杯相关内容。 文胸尺码对照表解读 女士买文胸时,往往需要先...
希尔排序的时间复杂度为O(n*log2n) 空间复杂度为O(1)是一种不稳定的排序算法 思想:希尔排序也是一种插入排序方法,实际上是一种分组插入方法。先取定一个小于n的整数d1作为第一个增量,把表的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序;然后,取第二个增量d2(<d1),重复上述的分组和排序,直至所取...
标签: 抗衰老 女人
女人24岁开始抗衰老一点也不早 女人24岁开始抗衰老一点也不早 1、不卸妆 彩妆绝对是把双刃剑,既可以立时三刻让女人美丽翻倍,也可能给肌肤带来负担。 皮肤科医生决不会劝你放弃彩妆,但一定会建议你彻底卸妆。因为夜间的时候,随着体温升高、毛孔打开,肌肤会吸收表面的东西,我想,你一定希望吸收的是有营养的护...
//******************************************************************* //在许多情况下我们需要穷举组合的算法,比如密码词典。 //这个算法的要害是密码下标进位的问题。 //另外本例子中的写文件语句效率比较低,为了降低算法复杂度没有优化。 //假如要提高写文件的效率,可以使用缓冲区,分批写入。 //******...
写个过河算法 作者:陈健 下载源代码 警察小偷爸爸妈妈儿子女儿过河,这个游戏不用说的吧,应该很多人见过,一般是考察隔壁邻居家小朋友智商的,有人把他做成了FLASH游戏。规则如游戏图。详细请看文件中那个FLASH游戏 : 那天看见MM在玩,一不小心...

经验教程

61

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部