找回密码
 欢迎注册
查看: 27421|回复: 28

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

[复制链接]
发表于 2009-9-16 10:26:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
  有已知的几个有次序数(2至10个,每个数字≥1,≤99)(比如 9 8 7 6 5 4 3 2 1 ),在数字间有空的地方填上适当的+,-,*,/,( ),使填后的算式=已知的常数(比如2009),不填处则认为进行“并”运算,即把两个数合起来(比如7 6=76),有这样简单程序能把所有情况都找出来吗? (给出的程序最好经过考证,能算出具体结果)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-16 10:32:31 | 显示全部楼层
要求要什么程序语言啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-16 10:41:59 | 显示全部楼层
包不包括逗号运算符本身啊?(就是 C 语言规定的,值为最后那条语句) 这类算法我没做过,只是帮大家问一下,呵呵。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-9-16 12:18:48 | 显示全部楼层
包不包括逗号运算符本身啊?(就是 C 语言规定的,值为最后那条语句) gxqcn 发表于 2009-9-16 10:41
不包括逗号运算符本身。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-9-16 12:25:58 | 显示全部楼层
本帖最后由 sheng_jianguo 于 2009-9-16 12:27 编辑
要求要什么程序语言啊 wayne 发表于 2009-9-16 10:32
什么程序语言都行,最好用常用的C 语言或FORTRAN语言。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-16 13:44:57 | 显示全部楼层
本帖最后由 wayne 于 2009-9-16 13:47 编辑 大致的想法就是往字符串987654321里插入运算符 然后将新字符串解释为一条命令。 这个用Bash和Tcl里的expr可以实现 也可以用Scilab里的evstr, Mathematica里的ToExpression
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-16 13:51:02 | 显示全部楼层
x**y是不是就表示$x^y$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-9-16 15:30:04 | 显示全部楼层
本帖最后由 sheng_jianguo 于 2009-9-16 15:33 编辑
x**y是不是就表示$x^y$ wayne 发表于 2009-9-16 13:51
不用考虑两个以上运算符组合运算(只需考虑+,-,*,/四种运算),当然能包括X**Y(即X^Y)最好了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-16 16:17:41 | 显示全部楼层
老以前写的VBA的例子,不加括号的,仅供参考:
  1. Sub calculate(ByVal target As Long, ParamArray s())
  2. Dim t As String, v As String, sign, temp As String
  3. Dim i As Long, j As Long, k As Long, n As Long, num As Long
  4. t = Join(s, " ")
  5. sign = Array("+", "-", "*", "/", " ")
  6. num = 5 ^ UBound(s)
  7. For i = 0 To num - 1
  8. k = i
  9. temp = s(0)
  10. For j = 1 To UBound(s)
  11. temp = temp & sign(k Mod 5) & s(j)
  12. k = k \ 5
  13. Next
  14. temp = Replace(Trim(temp), " ", "")
  15. If Abs(Evaluate(temp) - target) < 10 ^ -5 Then
  16. n = n + 1
  17. Debug.Print n & "."; vbTab; temp & "=" & target
  18. End If
  19. Next
  20. MsgBox n & " records were found."
  21. End Sub
  22. Sub main()
  23. calculate 2009, 9, 8, 7, 6, 5, 4, 3, 2, 1
  24. 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
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-16 18:40:06 | 显示全部楼层
http://bbs.emath.ac.cn/viewthrea ... &fromuid=20#pid9081 中我的程序可以处理只有加减乘除的情况. 不过这里等于又添加了一层连接运算.使得情况更加复杂了.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 02:06 , Processed in 0.026496 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表