2011华为上机机试题

来源:互联网 发布:linux退不出vi 编辑:程序博客网 时间:2024/05/16 12:31

1.

/*

     * 输入一个表达式,3*8+7-2,没有括号 输出结果

     */

    publicint getMyRet(String str) {

        char[] myCh = str.toCharArray();

        intloopLen = myCh.length;

        String[] myStr =new String[loopLen];

        intret = 0;

        intop1 = 0;

        intop2 = 0;

        booleanmFlag = true;

        inti = 1;// 循环变量

  

        for(int j = 0; j < myCh.length; ++j) {

            myStr[j] = Character.toString(myCh[j]);

        }

  

        // 处理乘除法

        while(mFlag) {

            for(; i < loopLen - 1; ++i) {

                if("*".equals(myStr[i]) ||"/".equals(myStr[i])) {

                    op1 = Integer.parseInt(myStr[i -1]);

                    op2 = Integer.parseInt(myStr[i +1]);

  

                    if("*".equals(myStr[i])) {

                        ret = op1 * op2;

                    }else {

                        ret = op1 / op2;

                    }

                    mFlag =true;

                    myStr[i -1] = Integer.toString(ret);

                    for(int j = i; j < loopLen - 2; ++j) {

                        myStr[j] = myStr[j +2];

                    }

                    loopLen = loopLen -2;

                    break;

                }

  

                // 乘法 和 除法 已经 运算完了

                if(i == loopLen - 2|| loopLen == 1) {

                    mFlag =false;

                    break;

                }

            }

  

            // 乘法 和 除法 已经 运算完了

            if(loopLen == 1) {

                mFlag =false;

                break;

            }

        }

  

        if(loopLen > 1) {

            mFlag =true;

            i =1;

        }else {

            mFlag =false;

        }

  

        // 加减法运算

        while(mFlag) {

            for(; i < loopLen - 1; ++i) {

                if("+".equals(myStr[i]) ||"-".equals(myStr[i])) {

                    op1 = Integer.parseInt(myStr[i -1]);

                    op2 = Integer.parseInt(myStr[i +1]);

  

                    if("+".equals(myStr[i])) {

                        ret = op1 + op2;

                    }else {

                        ret = op1 - op2;

                    }

                    mFlag =true;

                    myStr[i -1] = Integer.toString(ret);

                    for(int j = i; j < loopLen - 2; ++j) {

                        myStr[j] = myStr[j +2];

                    }

                    loopLen = loopLen -2;

                    break;

                }

            }

  

            // 加法 和 减法 已经 运算完了

            if(loopLen == 1) {

                mFlag =false;

                break;

            }

        }

  

        returnret;

    }

 

2.

/*
     * 输入字符串长度,字符串,计数m。从前往后技术,当数道m个元素时,m个元素出列,同时将该元素赋值给m,
     * 然后从下一个数计数循环,直到所有数字都出列位置,给定的数全部为大于0的数字。
     * 输出出队队列
     */
    publicString getOutString(intlen, String str, intm) {
        StringBuffer sBuffer =new StringBuffer("");
        String[] myStr = str.split(",");
        int[] myInt =new int[len];
        intmyLen = len;
        intnNum = m % myLen;
        inttemp = 0;
  
        for(int i = 0; i < len; ++i) {
            myInt[i] = Integer.parseInt(myStr[i]);
        }
  
        while(myLen > 0) {
            if(nNum == 0) {
                temp = myInt[myLen -1];
            }else {
                temp = myInt[nNum -1];
                for(int i = nNum; i < myLen; ++i) {
                    myInt[i -1] = myInt[i];
                }
            }
  
            --myLen;
  
            if(myLen > 0) {
                if(nNum == 0) {
                    nNum = temp % myLen;
                }else {
                    nNum = temp % myLen + (nNum -1);
                    if(nNum > myLen - 1)
                        nNum = nNum % myLen;
                }
            }
  
            sBuffer.append(temp);
            if(myLen > 0)
                sBuffer.append(",");
        }
  
        returnsBuffer.toString();
    }

 

3.

/*
     * 输入字符串长度,字符串。从后向前比较,以最短字符串为标准 输出不同的元素的个数
     */
    publicint getDiffNum(intlen1, String str1, intlen2, String str2) {
        intmyCount = 0;
        intmyLen = 0;
        String[] myStr1 = str1.split(",");
        String[] myStr2 = str2.split(",");
  
        if(len1 > len2) {
            myLen = len2;
        }else
            myLen = len1;
  
        for(int i = 0; i < myLen; ++i) {
            if(!myStr1[len1 - i - 1].equals(myStr2[len2 - i -1])) {
                ++myCount;
            }
        }
  
        returnmyCount;
    }