回 帖 发 新 帖 刷新版面

主题:请高手指点

从键盘输入四个自然数,请用这四个自然数组成一个不含括号的加减法混合运算题,使该题所有结果最小(但不能小于零,而且运算的中间结果也不能小于零)输出格式要符合数学算式的要求,如有多种解答,只需输出一种符合要求的表达式。
例如:输入:15 6 12 4
输出:15-12+4-6=1

回复列表 (共5个回复)

沙发

CLS
DATA 1,1,1,1,1,-1,1,-1,1,1,-1,-1,-1,1,1,-1,1,-1,-1,-1,1,-1,-1,-1
DIM a(4), b(4), f(3)
INPUT a(1), a(2), a(3), a(4): t = 10000
FOR i = 1 TO 4: FOR j = 1 TO 4: FOR k = 1 TO 4: FOR l = 1 TO 4
    IF i <> j AND i <> k AND i <> l AND j <> k AND j <> l AND k <> l THEN
       s = 0: RESTORE
       FOR m = 1 TO 8
           READ f1, f2, f3
           s = a(i)
           s = s + f1 * a(j): IF s < 0 THEN 1
           s = s + f2 * a(k): IF s < 0 THEN 1
           s = s + f3 * a(l): IF s < 0 THEN 1
           IF s < t THEN
              t = s: b(1) = a(i): b(2) = a(j): b(3) = a(k): b(4) = a(l)
              f(1) = f1: f(2) = f2: f(3) = f3
           END IF
1      NEXT m
    END IF
NEXT l, k, j, i
FOR i = 1 TO 3
    IF f(i) = 1 THEN s$ = "+" ELSE s$ = "-"
    PRINT b(i); s$;
NEXT i
PRINT b(4); "="; t: END

板凳

min = 10000
CLS
INPUT a, b, c, d
DIM jg(10000)
a(1) = a
a(2) = b
a(3) = c
a(4) = d
F$(1) = "+"
F$(2) = "-"
FOR a1 = 1 TO 4
  FOR a2 = 1 TO 4
    FOR a3 = 1 TO 4
       FOR a4 = 1 TO 4
         FOR f1 = 1 TO 2
           FOR f2 = 1 TO 2
             FOR f3 = 1 TO 2
             IF a1 * a2 * a3 * a4 = 24 AND a1 + a2 + a3 + a4 = 10 THEN
                         IF f1 = 1 THEN jg = a(a1) + a(a2) ELSE jg = a(a1) - a(a2)
                         IF jg >= 0 THEN IF f2 = 1 THEN jg = jg + a(a3) ELSE jg = jg - a(a3)
                         IF jg >= 0 THEN IF f3 = 1 THEN jg = jg + a(a4) ELSE jg = jg - a(a4)
                         IF jg < min AND jg >= 0 THEN
             min = jg
             b(1) = a(a1)
             b(2) = a(a2)
             b(3) = a(a3)
             b(4) = a(a4)
             F(1) = f1
             F(2) = f2
             F(3) = f3
             jg = 0
             END IF
             END IF
             NEXT f3
           NEXT f2
         NEXT f1
       NEXT a4
     NEXT a3
   NEXT a2
NEXT a1
FOR I = 1 TO 3
IF F(I) = 1 THEN PRINT b(I); "+";  ELSE PRINT b(I); "-";
NEXT
PRINT b(4); "="; min
END

这样编对不对呢?

3 楼

最麻烦的方法对吧

4 楼

!i!I!II!I!II!II!IiiiIi1iii1i1i1!1Iii1i!ii1i1Ii!i

5 楼

给了啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册