主题:求助
wzc1996
[专家分:1680] 发布于 2007-04-22 19:07:00
从键盘输入四个自然数,请用这四个自然数组成一个不含 括号的加减法混合运算题,使该题所得结果最小(但不能为负值,而且运算的中间结果也不能为负值)。输出格式要符合数学算式的要求,如有多种解答,需输出所有符合要求的表达式
如:输入:15,6,12,4
输出:15-12+4-6=1
15+4-12-6=1
15+4-6-12=1
15-6+4-12=1
4+15-12-6=1
4+15-6-12=1
有没有简单方法!
回复列表 (共6个回复)
沙发
&佑慧妹妹& [专家分:660] 发布于 2007-04-22 19:24:00
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
板凳
&佑慧妹妹& [专家分:660] 发布于 2007-04-22 19:25:00
虽然程序很长
可很容易懂才对
3 楼
wzc1996 [专家分:1680] 发布于 2007-04-22 19:36:00
thanks
4 楼
Matodied [专家分:7560] 发布于 2007-04-22 21:08:00
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
5 楼
Matodied [专家分:7560] 发布于 2007-05-01 20:29:00
我的程序有点错误,因为在有多种解答时,我的程序永远只能输出一种.
正确的程序:
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
1 NEXT m
END IF
NEXT l, k, j, i
FOR i = 1 TO 4: FOR j = 1 TO 4: FOR k = 1 TO 4: FOR l = 1 TO 4
IF i <> j AND j <> k AND k <> l AND i <> k AND i <> l AND j <> 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 2
s = s + f2 * a(k): IF s < 0 THEN 2
s = s + f3 * a(l): IF s < 0 THEN 2
IF s = t THEN GOSUB pri
2 NEXT m
END IF
NEXT l, k, j, i
END
pri:
PRINT a(i);
IF f1 = 1 THEN s$ = "+" ELSE s$ = "-"
PRINT s$; a(j);
IF f2 = 1 THEN s$ = "+" ELSE s$ = "-"
PRINT s$; a(k);
IF f3 = 1 THEN s$ = "+" ELSE s$ = "-"
PRINT s$; a(l); "="; t
RETURN
6 楼
小精灵LS [专家分:580] 发布于 2007-05-10 10:35:00
CLS
DIM B$(-1 TO 1), A(4)
INPUT A(1), A(2), A(3), A(4)
F = A(1) + A(2) + A(3) + A(4)
B$(-1) = "-": B$(1) = "+"
FOR A = 1 TO 4: FOR A1 = -1 TO 1 STEP 2
FOR B = 1 TO 4: FOR B1 = -1 TO 1 STEP 2
FOR C = 1 TO 4: FOR C1 = -1 TO 1 STEP 2
FOR D = 1 TO 4
IF A * B * C * D <> 24 OR A + B + C + D <> 10 THEN 1
E1 = A(A) + A1 * A(B)
E2 = E1 + B1 * A(C)
E3 = E2 + C1 * A(D)
IF E1 < 0 OR E1 < 0 OR E3 < 0 THEN 1
IF E3 < F THEN F = E3
1 NEXT D, C1, C, B1, B, A1, A
FOR A = 1 TO 4: FOR A1 = -1 TO 1 STEP 2
FOR B = 1 TO 4: FOR B1 = -1 TO 1 STEP 2
FOR C = 1 TO 4: FOR C1 = -1 TO 1 STEP 2
FOR D = 1 TO 4
IF A * B * C * D <> 24 OR A + B + C + D <> 10 THEN 2
E1 = A(A) + A1 * A(B)
E2 = E1 + B1 * A(C)
E3 = E2 + C1 * A(D)
IF E1 < 0 OR E2 < 0 OR E3 < 0 THEN 2
IF E3 = F THEN PRINT A(A); B$(A1); A(B); B$(B1); A(C); B$(C1); A(D); "="; E3
2 NEXT D, C1, C, B1, B, A1, A
END
快点给我加分啊!
我来回复