sheng_jianguo 发表于 2009-9-16 10:26:16

2至10个数,使用+,-,×,/,并运算=常数的程序

  有已知的几个有次序数(2至10个,每个数字≥1,≤99)(比如 9 8 7 6 5 4 3 2 1 ),在数字间有空的地方填上适当的+,-,*,/,( ),使填后的算式=已知的常数(比如2009),不填处则认为进行“并”运算,即把两个数合起来(比如7 6=76),有这样简单程序能把所有情况都找出来吗? (给出的程序最好经过考证,能算出具体结果)

wayne 发表于 2009-9-16 10:32:31

要求要什么程序语言啊

gxqcn 发表于 2009-9-16 10:41:59

包不包括逗号运算符本身啊?(就是 C 语言规定的,值为最后那条语句)

这类算法我没做过,只是帮大家问一下,呵呵。

sheng_jianguo 发表于 2009-9-16 12:18:48

包不包括逗号运算符本身啊?(就是 C 语言规定的,值为最后那条语句)

gxqcn 发表于 2009-9-16 10:41 http://bbs.emath.ac.cn/images/common/back.gif
不包括逗号运算符本身。

sheng_jianguo 发表于 2009-9-16 12:25:58

本帖最后由 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:44:57

本帖最后由 wayne 于 2009-9-16 13:47 编辑

大致的想法就是往字符串987654321里插入运算符
然后将新字符串解释为一条命令。

这个用Bash和Tcl里的expr可以实现

也可以用Scilab里的evstr, Mathematica里的ToExpression

wayne 发表于 2009-9-16 13:51:02

x**y是不是就表示$x^y$

sheng_jianguo 发表于 2009-9-16 15:30:04

本帖最后由 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)最好了。

northwolves 发表于 2009-9-16 16:17:41

老以前写的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

mathe 发表于 2009-9-16 18:40:06

http://bbs.emath.ac.cn/viewthread.php?tid=705&page=8&fromuid=20#pid9081
中我的程序可以处理只有加减乘除的情况.
不过这里等于又添加了一层连接运算.使得情况更加复杂了.
页: [1] 2 3
查看完整版本: 2至10个数,使用+,-,×,/,并运算=常数的程序