|
|

楼主 |
发表于 2005-3-22 14:14:00
|
显示全部楼层
Re: 求救:请教一个困扰了我很久的小问题!~急
感谢lights兄提供的方法,但我用此方法试了一下,还是解决不了我的实际问题。
真实的题目(我本想自己解决,可我递归学的又差,只好...):
有6个一位数,将它组成一个等式,是等式成立(不能重复使用)。如189975组成78-59=19
就是“开心词典”的题目,我想设计一个程序,只要你输入6个数,经过一系列算法,就能的出答案(有+ - * /四种运算符,可能不
只一个答案),我的思路如下:
1.首先,确定3个数的位数,即第一个数是几位数?第二个数是几位数?第三个数是几位数?
这个算法我已解决,用了3个循环,稍加修改就适用于任意的数,如:有3个一位数,程序得出的结果是111即 一位数 + 一位数 = 一
位数等。
2.然后,确定具体是什么数,在这一步我卡住了,但只要解决了就作好了。
3.最后,不难扩展成输入任意个一位数( >=3 ),即可得出答案。
下面是我的程序:
当是3个数时(用3个数组成)
For first = 3 To 1 Step -1 '//操作数1的位数
For second = 3 - first To 1 Step -1 '//操作数2的位数
For third = 3 - first - second To 1 Step -1 '//结果的位数
If first + second + third = 3 Then
'//3个数时只有一种组合:111
MsgBox("组合为:" & first & second & third, MsgBoxStyle.OKOnly, "total")
For x = 1 To 3 '//开始组成第1个数
For y = 1 To 3 '//开始组成第2个数
If x <> y Then
For z = 1 to 3 '//开始组成第3个数
If z <> x And z <> y Then
'//判断num(x) + num(y) = num(z) ?
'//判断num(x) - num(y) = num(z) ?
'//判断num(x) * num(y) = num(z) ?
'//判断num(x) / num(y) = num(z) ?
End if
Next
End if
Next
Next
End If
Next
Next
Next
当是6个数时
For first = 6 To 1 Step -1 '//操作数1的位数
For second = 6 - first To 1 Step -1 '//操作数2的位数
For third = 6 - first - second To 1 Step -1 '//结果的位数
If first + second + third = 6 Then
'//6个数时有十种组合:411 / 321 / 312 / 231 / 222 / 213 / 141 / 132 / 123 / 114
MsgBox("组合为:" & first & second & third, MsgBoxStyle.OKOnly, "total")
For x = 1 To 6 '//开始组成第1个数,它由4个数构成
For xx = 1 To 6
For xxx = 1 To 6
For xxxx = 1 To 6'//第一个完成
For y = 1 To 6'//第二个数也是一个For...Next循环,且由一个数构成它就内嵌循环几次
If y <> xxxx And y <> xxx And y <> xx And y <> x Then
For z = 1 To 6 '//第三个数也是一个For...Next循环,且由一个数构成它就内嵌循环几次
If z <> y And z <> xxxx And z <> xxx And z <> xx And z <> x Then
'//判断num(x)*1000+num(xx)*100+num(xxx)*10 + num(y) = num(z) ?
'//判断num(x)*1000+num(xx)*100+num(xxx)*10 + num(x) - num(y) = num(z) ?
'//判断num(x)*1000+num(xx)*100+num(xxx)*10 + num(x) * num(y) = num(z) ?
'//判断num(x)*1000+num(xx)*100+num(xxx)*10 + num(x) / num(y) = num(z) ?
End if
Next
End if
Next
Next
Next
Next
Next
End If
Next
Next
Next
是否能编一个通用过程能同时满足任意组合的要求(难道根本就编不起来?是我思考的方向错了?还是...)?请高手们赐教。 [em24] |
|