主题:高手快来!
纯情鸭鸭
[专家分:30] 发布于 2007-07-22 11:49:00
密码:1 2 3 4 5 6 7 8 9
在空格处填入适当的'+'或'-'使得数等于输入的X
例如:X=182
123+45+6+7-8+9
输入X后,打印所有的可能性!
这题可以不用过程来作吗?
可以用八重循环吗?
每重循环从-1 to 1,-1 代表'-',0代表没有符号,1代表'+'!
请高手指点指点!!!
回复列表 (共4个回复)
沙发
Matodied [专家分:7560] 发布于 2007-07-22 14:30:00
用递归!
PROCEDURE conc;
VAR
i, k, l, kk: INTEGER; b, c, s, ss: STRING;
BEGIN
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 := '';
l := LENGTH(s);
FOR k:=1 TO l DO BEGIN
b := COPY(s, k, 1);
IF (b = '+') OR (b = '-') THEN BEGIN
point := point + 1; VAL(c, a2[point], kk); sign2[point] := b;
c := '';
END ELSE BEGIN
c := c + b;
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.
板凳
bigchen [专家分:1940] 发布于 2007-07-23 08:25:00
我怎么认为应该是回溯呢?
程序现在我没有时间编
但我认为应该是回溯
3 楼
纯情鸭鸭 [专家分:30] 发布于 2007-07-23 12:05:00
[quote]我怎么认为应该是回溯呢?
程序现在我没有时间编
但我认为应该是回溯[/quote]
4 楼
Matodied [专家分:7560] 发布于 2007-07-23 13:24:00
回朔当然也可以,但没有递归简单。
我来回复