• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 7,comments - 3,trackbacks - 0

            Professor Maple teaches mathematics in a university. He have invented a function for the purpose of obtaining the operands from an expression. The function named op(i,e) can be described as follows: The expression e may be divided into sub-expression(s) by the operator, which has the lowest priority in the expression. For example, the expression “a*b+b*c+c*d” should be divided into three sub-expressions “a*b”, “b*c” and “c*d”, because the operator “+” has the lowest priority. The purpose of this function is to extract the ith sub-expression as the result. So, in the example above, op(2,e)=b*c.

            If we regard the sub-expression as the main expression, it might be divided again and again. Obviously, the dividing process is recursive. As you see, the following example is much more complex:

            Let p:=a^b*c+(d*c)^f*z+b
            op(1,op(1,op(2,p)))=(d*c)
            op(1,op(1,op(1,op(2,p))))=d*c
            op(2,op(2,p))=z
            op(3,p)=b
            op(1,op(3,p))=b

            Professor Maple is so lazy that he would leave the work to computer rather than do it himself, when the expression is long and complicated. Of course, without your program, the computer won’t work out the result automatically.

            Input

            The input file contains several test cases. The last test case in the input file is followed by a line containing a symbol “*”, indicating the end of the input data. Each test case consists of two parts. The first part describes the expression, while the second part contains several questions, which should be calculated according to the expression.

            The first line of each test case contains an expression consists of the expression name, “:=” and the content of the expression. The expression name is a lowercase. And the content is composed by lowercases and operators “+”, “(”, “)”, “*” and “^”. For example, here is a valid expression, p:=a^b*c+(d*c)^f*z+b. Among those operators, “(” and “)” have the highest priority. The operator “^” has a lower priority, and then “*”. The priority of the operator “+” is the lowest.

            The second line of each test case contains an integer n indicating n questions based on the above expression. This is followed by n lines. Each of them contains the description of one question, which consists of integers. For example, the question with three integers “2 1 1” describes the function op(1,op(1,op(2,e))). To compute this function, we have to keep to the following sequence: First, according to the first integer 2, divide the expression and extract the 2nd sub-expression. Then, according to the second integer 1, divide the sub-expression and extract the 1st one. Finally, according to the third integer 1, divide the outcome again, and extract the result.

            Output

            For each test case, display the expression name and a colon on the first line. Then display the result of each question on a line. The layout of the output is shown in the sample output.

            You may assume that all expressions and functions are always valid.

            Display a blank line between test cases.

            Sample Input

            p:=a^b*c+(d*c)^f*z+b 
            4
            2 1 1
            2 2
            3
            3 1
            a:=(x+y)
            3
            1
            1 2
            1 2 1
            *

            Sample Output

            Expression p: 
            op(1,op(1,op(2,p)))=(d*c)
            op(2,op(2,p))=z
            op(3,p)=b
            op(1,op(3,p))=b

            Expression a:
            op(1,a)=x+y
            op(2,op(1,a))=y
            op(1,op(2,op(1,a)))=y


            模擬題,處理好原字符串的優(yōu)先級(jí)就行了。
            代碼:
            #include <iostream>
            #include 
            <cstring>
            #include 
            <cstdio>
            using namespace std;

            int find(char c)
            {
                
            if (c == '(' || c == ')'return 4;
                
            if (c == '^'return 3;
                
            if (c == '*'return 2;
                
            if (c == '+'return 1;
                
            return 1000;
            }

            char s[101];
            string e;
            int n, i, j, k, p[101], r[101], v[101], head, tail, x, ri, d = 0;

            int main()
            {
                
            while (scanf("%s", s), s[0!= '*')
                {
                    
            if (d++) puts("");
                    head 
            = 0;
                    e 
            = "";
                    
            while (s[head] != ':')
                      e 
            += s[head++];
                    head 
            += 2;
                    printf(
            "Expression %s:\n", e.c_str());
                    tail 
            = strlen(s) - 1;
                    x 
            = 0;
                    
            for (i = head; i <= tail; ++i)
                    {
                        
            if (s[i] == ')') x -= 4;
                        v[i] 
            = find(s[i]) + x;
                        
            if (s[i] == '(') x += 4;
                    }
                    scanf(
            "%d\n"&k);
                    
            for (i = 0; i < k; ++i)
                    {
                        ri 
            = 0;
                        
            int head1 = 3, min1, t;
                        tail 
            = strlen(s);
                        
            char c;
                        
            while ((c = getchar()) != '\n')
                        {
                            cin.putback(c);
                            scanf(
            "%d"&n);
                            r[ri
            ++= n;
                            min1 
            = 1000;
                            
            for (j = head1; j < tail; ++j)
                              
            if (v[j] < min1) min1 = v[j];
                            
            if (s[head1] == '(' && s[tail - 1== ')' && min1 == v[head1])
                            {
                                head1
            ++;
                                tail
            --;
                            }
                            
            else
                              
            if (head1 + 1 == tail){}
                            
            else
                            {
                                p[
            0= head1 - 1;
                                
            for (j = head1, t = 1; j < tail; ++j)
                                  
            if (v[j] == min1)
                                  {
                                      p[t
            ++= j;
                                  }
                                p[t] 
            = tail;
                                head1 
            = p[n - 1+ 1;
                                tail 
            = p[n];
                            }
                        }
                        
            for (j = ri - 1; j >= 0--j)
                          printf(
            "op(%d,", r[j]);
                        printf(
            "%s", e.c_str());
                        
            for (j = 0; j < ri; ++j)
                          printf(
            ")");
                        printf(
            "=");
                        
            for (j = head1; j < tail; ++j)
                            printf(
            "%c", s[j]);
                        puts(
            "");
                    }
                }
                
            return 0;
            }
            posted on 2011-10-25 19:53 LLawliet 閱讀(240) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 模擬

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久精品国产亚洲AV麻豆网站| 亚洲成色999久久网站| 久久精品国产一区二区| 久久www免费人成精品香蕉| 无码人妻少妇久久中文字幕| 一本久久知道综合久久| 狠狠久久亚洲欧美专区| 婷婷久久综合| 九九精品99久久久香蕉| 久久天天婷婷五月俺也去| 久久精品国产精品国产精品污| 国产高潮国产高潮久久久91| 久久亚洲精品无码VA大香大香| 久久精品一区二区影院| 伊人久久综合成人网| 91久久精品视频| 久久香蕉国产线看观看精品yw | 欧洲性大片xxxxx久久久| 久久精品国产欧美日韩99热| 国产精品久久影院| 久久精品aⅴ无码中文字字幕不卡| 亚洲成色999久久网站| 久久男人Av资源网站无码软件| 欧美粉嫩小泬久久久久久久| 久久久久婷婷| 国产精品久久久久9999高清| 丁香色欲久久久久久综合网| 久久精品亚洲精品国产欧美| 国产精品久久久久影视不卡| 久久久精品人妻一区二区三区蜜桃| 午夜精品久久久久| 久久天天躁狠狠躁夜夜2020| 成人午夜精品久久久久久久小说 | 亚洲人成精品久久久久| 日韩电影久久久被窝网| 久久婷婷综合中文字幕| 久久精品国产福利国产琪琪| 亚洲天堂久久精品| 国产高潮国产高潮久久久91 | 免费一级欧美大片久久网| 国产成人AV综合久久|