美文网首页
华为笔试题

华为笔试题

作者: UAV | 来源:发表于2020-07-12 16:21 被阅读0次

    x#y=2x+3y+4
    xy=3*x+y+2优先级高于#

    7#6$5#12
    =7#(36+5+2)#12
    =7#25#12
    =(2
    7+325+4)#12
    =93#12
    =2
    93+3*12+4
    =226

    思路

    1,字符串切割,将字符串中的数字和符号分离压入vector中

    2,找出有几个运算符有限级高的符号'$'.

    3.先运算优先级高的'$',在运算优先级低的'#'

    #include<vector>
    int main() {
        vector<char>data;
        vector<char>symbal;
        string str = "";
        while (cin >> str)
        {
            /*
            x#y=2*x+3*y+4
            x$y=3*x+y+2
            $优先级高于#
    
             7#6$5#12
            =7#(3*6+5+2)#12
            =7#25#12
            =
            */
    
            //1.先遍历字符串,将结果压入vector中
            vector<int>data;
            vector<char>symbal;
            //1.将数字、字符压入vector中。
            string tmp_data = "";
            for (int i = 0; i < str.size(); i++)
            {
                //当前是数字,下一个是否为数字。如果不是数字结束。
                if ('0' <= str[i] && str[i] <= '9') {
                    //数字是最后一个
                    if (i + 1 == str.size()) {
                        tmp_data+= str[i];
                        //cout << "最后一个数字:" << tmp_data << endl;
                        data.push_back(stoi(tmp_data));
                    }
                    //下一个是数字
                    if ((i + 1 < str.size()) && '0' <= str[i + 1] && str[i + 1] <= '9') {
                        tmp_data += str[i];
                        
                    }
                    //下一个是符号
                    if ((i + 1 < str.size()) && (str[i+1] == '$' || str[i+1] == '#')) {
                        tmp_data += str[i];
                        //cout << "打印数字:" << tmp_data << endl;
                        data.push_back(stoi(tmp_data));
                        tmp_data="";
                    }
                }//是符号
                else
                {
                    
                    symbal.push_back(str[i]);
                }
            }
    
            //2.统计有多少个$并进行计算
            int total_befor = 0;
            for (int i = 0; i <symbal.size(); i++)
            {
                if (symbal[i] == '$') {
                    total_befor++;
                }
            }
            for (int k = 0; k < total_befor; k++)
            {
                //先判断有几个处理优先级高的$
                for (int i = 0; i <symbal.size(); i++)
                {
                    //优先级高的符号
                    if (symbal[i] == '$') {
                        //计算
                        //x$y = 3 * x + y + 2
                        int tmp_data = 3 * data[i] + data[i + 1] + 2;
                        data.erase(data.begin() + i);
                        data[i] = tmp_data;
                        symbal.erase(symbal.begin() + i);
                        break;
                    }
                }
            }
            //x#y=2*x+3*y+4
            int length = symbal.size();
            for (int m = 0; m < length; m++)
            {
                for (int i = 0; i < length; i++)
                {
                    int tmp=2 * data[0] + 3 * data[1] + 4;
                    symbal.erase(symbal.begin());
                    data.erase(data.begin());
                    data[0]=tmp;
                    break;
                }
            }
    
    
            //打印符号和数字
            for (int i = 0; i < data.size(); i++)
            {
                cout << data[i]<<" ";
            }
            cout << endl;
    
            //for (int i = 0; i <symbal.size(); i++)
            //{
            //  cout << symbal[i]<<" ";
            //}
            //cout << endl;
            system("pause");
        }
    }
    

    相关文章

      网友评论

          本文标题:华为笔试题

          本文链接:https://www.haomeiwen.com/subject/entncktx.html