主题:请教Matodied,请教007bond!
纯情鸭鸭
[专家分:30] 发布于 2007-07-21 13:32:00
密码:1 2 3 4 5 6 7 8 9
在空格处填入适当的'+'或'-'使得数等于输入的X
例如:X=182
123+45+6+7-8+9
输入X后,打印所有的可能性!
回复列表 (共11个回复)
沙发
Matodied [专家分:7560] 发布于 2007-07-21 14:06:00
这个?
可以枚举3个运算符:+、-、&。其中&的作用是把前面和后面的数连接起来。如1&2=12.
显然,&的等级要高于+和-。
然后加上运算符,再计算。
比如:
123+45+6+7-8+9
=
1&2&3+4&5+6+7-8+9
注意计算时先计算“&”再计算+和-。
板凳
Lovely哆啦 [专家分:1360] 发布于 2007-07-21 14:08:00
请说具体一些!!谢谢拉!
3 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-21 14:09:00
能告诉我程序的结构吗?
4 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-21 14:10:00
在PASCAL里有&这个运算符号吗?
5 楼
纯情鸭鸭 [专家分:30] 发布于 2007-07-21 14:13:00
就是呀!请告诉我们吧!!给你加分!!!
6 楼
纯情鸭鸭 [专家分:30] 发布于 2007-07-21 14:14:00
需要具体的程序!!!帮帮忙吧!!!感激不尽!!!!
7 楼
Matodied [专家分:7560] 发布于 2007-07-21 14:21:00
这个&是我自定义的,是枚举的。不是真有这个符号。
8 楼
纯情鸭鸭 [专家分:30] 发布于 2007-07-21 14:36:00
请把程序给我吧!!加分!!!加分!!!!加分!!!!!加分!!!!!!
9 楼
Matodied [专家分:7560] 发布于 2007-07-22 14:33:00
TYPE
arr1 = ARRAY[1..9] OF INTEGER;
arr2 = ARRAY[1..8] OF STRING;
VAR
a, a2: arr1; {a数组存放1-9之间的数,a2数组存放计算&后的各个数。}
sign, sign2: arr2; {sign数组存放运算符号,sign2数组只存放+、-}
point, x: INTEGER; {point为计算&后式子一共有多少个数。}
PROCEDURE pri; {输出式子}
VAR
i: INTEGER;
BEGIN
FOR i:=1 TO point - 1 DO BEGIN
WRITE(a2[i], sign2[i]);
END;
WRITELN(a2[point]);
END;
PROCEDURE calculate; {计算+、-}
VAR
i, result: INTEGER;
BEGIN
result := a2[1]; {result为结果,初始值为第一个数}
FOR i:=2 TO point DO BEGIN
IF sign2[i - 1] = '+' THEN result := result + a2[i] ELSE result := result - a2[i]; {计算}
END;
IF result = x THEN pri; {符合条件就输出}
END;
PROCEDURE conc; {计算&并分解式子}
VAR
i, k, l, kk: INTEGER; b, c, s, ss: STRING;
BEGIN
s := ''; {s为计算后的式子}
FOR i:=1 TO 17 DO BEGIN
IF i MOD 2 = 1 THEN BEGIN
STR(a[(i + 1) DIV 2], ss); {处理数字}
s := s + ss;
END ELSE BEGIN
IF sign[i DIV 2] <> '&' THEN s := s + sign[i DIV 2]; {处理运算符}
END;
END;
point := 0;
c := ''; {c为运算符(+、-)之间的数字}
l := LENGTH(s);
FOR k:=1 TO l DO BEGIN
b := COPY(s, k, 1); {b为取出的字符}
IF (b = '+') OR (b = '-') THEN BEGIN {如果是运算符}
point := point + 1; VAL(c, a2[point], kk); sign2[point] := b;
c := ''; {运算符和数字进入数组}
END ELSE BEGIN {如果是数字}
c := c + b; {存到c中}
END;
END;
point := point + 1; VAL(c, a2[point], kk); {要注意,最后的数字还没有存入}
calculate; {计算}
END;
PROCEDURE find(i: INTEGER); {寻找运算符}
VAR
j, k: INTEGER; t: STRING;
BEGIN
FOR j:=1 TO 3 DO BEGIN
CASE j OF
1: t := '+';
2: t := '-';
3: t := '&';
END;
sign[i] := t;
IF i < 8 THEN BEGIN
find(i + 1);
END ELSE BEGIN
FOR k:=1 TO 9 DO a[k] := k;
conc;
END;
END;
END;
BEGIN
READLN(x);
find(1);
END.
10 楼
纯情鸭鸭 [专家分:30] 发布于 2007-07-22 22:34:00
太麻烦,不过有劳了,分还是得加!!
我来回复