回 帖 发 新 帖 刷新版面

主题:想加分的就来吧!

有劳个位大虾,把这个QB程序,转换成PASCAL程序!
DEFLNG A-Z
INPUT X
FOR i = 1 TO 3 ^ 8
    s$ = SSS$((i))
    IF XXX((s$)) = X THEN PRINT s$
NEXT

FUNCTION SSS$ (a)
b$ = "1"
FOR i = 50 TO 57
    c = a MOD 3
    a = a \ 3
    IF c > 0 THEN b$ = b$ + MID$("+-", c, 1)
    b$ = b$ + CHR$(i)
NEXT
SSS$ = b$
END FUNCTION

FUNCTION XXX (s$)
DO
   a = VAL(s$)
   c = LEN(STR$(a))
   b = VAL(MID$(s$, c + 1))
   d = LEN(STR$(b))
   SELECT CASE MID$(s$, c, 1)
   CASE "+": e = a + b
   CASE "-": e = a - b
   CASE ELSE: EXIT DO
   END SELECT
   s$ = LTRIM$(STR$(e)) + MID$(s$, c + d)
LOOP
XXX = e
END FUNCTION

回复列表 (共2个回复)

沙发

TYPE
    arr1 = ARRAY[1..9] OF INTEGER;
    arr2 = ARRAY[1..8] OF STRING;
VAR
   a, a2: arr1;
   sign, sign2: arr2;
   point, x: INTEGER;
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];
    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 := '';
    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.

板凳

感慨一下:
老了……
把QB丢了,靠QB起的家,现在连QB都读不懂了!
哎!

我来回复

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