2至10个数,使用+,-,×,/,并运算=常数的程序
有已知的几个有次序数(2至10个,每个数字≥1,≤99)(比如 9 8 7 6 5 4 3 2 1 ),在数字间有空的地方填上适当的+,-,*,/,( ),使填后的算式=已知的常数(比如2009),不填处则认为进行“并”运算,即把两个数合起来(比如7 6=76),有这样简单程序能把所有情况都找出来吗? (给出的程序最好经过考证,能算出具体结果) 要求要什么程序语言啊 包不包括逗号运算符本身啊?(就是 C 语言规定的,值为最后那条语句)这类算法我没做过,只是帮大家问一下,呵呵。 包不包括逗号运算符本身啊?(就是 C 语言规定的,值为最后那条语句)
gxqcn 发表于 2009-9-16 10:41 http://bbs.emath.ac.cn/images/common/back.gif
不包括逗号运算符本身。 本帖最后由 sheng_jianguo 于 2009-9-16 12:27 编辑
要求要什么程序语言啊
wayne 发表于 2009-9-16 10:32 http://bbs.emath.ac.cn/images/common/back.gif
什么程序语言都行,最好用常用的C 语言或FORTRAN语言。 本帖最后由 wayne 于 2009-9-16 13:47 编辑
大致的想法就是往字符串987654321里插入运算符
然后将新字符串解释为一条命令。
这个用Bash和Tcl里的expr可以实现
也可以用Scilab里的evstr, Mathematica里的ToExpression x**y是不是就表示$x^y$ 本帖最后由 sheng_jianguo 于 2009-9-16 15:33 编辑
x**y是不是就表示$x^y$
wayne 发表于 2009-9-16 13:51 http://bbs.emath.ac.cn/images/common/back.gif
不用考虑两个以上运算符组合运算(只需考虑+,-,*,/四种运算),当然能包括X**Y(即X^Y)最好了。 老以前写的VBA的例子,不加括号的,仅供参考:Sub calculate(ByVal target As Long, ParamArray s())
Dim t As String, v As String, sign, temp As String
Dim i As Long, j As Long, k As Long, n As Long, num As Long
t = Join(s, " ")
sign = Array("+", "-", "*", "/", " ")
num = 5 ^ UBound(s)
For i = 0 To num - 1
k = i
temp = s(0)
For j = 1 To UBound(s)
temp = temp & sign(k Mod 5) & s(j)
k = k \ 5
Next
temp = Replace(Trim(temp), " ", "")
If Abs(Evaluate(temp) - target) < 10 ^ -5 Then
n = n + 1
Debug.Print n & "."; vbTab; temp & "=" & target
End If
Next
MsgBox n & " records were found."
End Sub
Sub main()
calculate 2009, 9, 8, 7, 6, 5, 4, 3, 2, 1
End Sub
返回:
1. 9*8-7+6*54*3*2*1=2009
2. 9+8*7+6*54*3*2*1=2009
3. 9*8-7+6*54*3*2/1=2009
4. 9+8*7+6*54*3*2/1=2009 http://bbs.emath.ac.cn/viewthread.php?tid=705&page=8&fromuid=20#pid9081
中我的程序可以处理只有加减乘除的情况.
不过这里等于又添加了一层连接运算.使得情况更加复杂了.