回 帖 发 新 帖 刷新版面

主题:高手快来!

密码: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个回复)

沙发

用递归!
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.

板凳

我怎么认为应该是回溯呢?
程序现在我没有时间编
但我认为应该是回溯

3 楼

[quote]我怎么认为应该是回溯呢?
程序现在我没有时间编
但我认为应该是回溯[/quote]

4 楼

回朔当然也可以,但没有递归简单。

我来回复

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