华为笔试题

2020-07-12  本文已影响0人  UAV

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");
    }
}
上一篇下一篇

猜你喜欢

热点阅读