回 帖 发 新 帖 刷新版面

主题:请教Matodied,请教007bond!

密码:1 2 3 4 5 6 7 8 9
在空格处填入适当的'+'或'-'使得数等于输入的X
例如:X=182
     123+45+6+7-8+9
输入X后,打印所有的可能性!

回复列表 (共11个回复)

沙发

这个?

可以枚举3个运算符:+、-、&。其中&的作用是把前面和后面的数连接起来。如1&2=12.

显然,&的等级要高于+和-。

然后加上运算符,再计算。

比如:
123+45+6+7-8+9
=
1&2&3+4&5+6+7-8+9
注意计算时先计算“&”再计算+和-。

板凳

请说具体一些!!谢谢拉!

3 楼

能告诉我程序的结构吗?

4 楼

在PASCAL里有&这个运算符号吗?

5 楼

就是呀!请告诉我们吧!!给你加分!!!

6 楼

需要具体的程序!!!帮帮忙吧!!!感激不尽!!!!

7 楼

这个&是我自定义的,是枚举的。不是真有这个符号。

8 楼

请把程序给我吧!!加分!!!加分!!!!加分!!!!!加分!!!!!!

9 楼

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 楼

太麻烦,不过有劳了,分还是得加!!

我来回复

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