2011华为上机机试题

1.

/*

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

     */

    public int getMyRet(String str) {

        char[] myCh = str.toCharArray();

        int loopLen = myCh.length;

        String[] myStr = new String[loopLen];

        int ret = 0;

        int op1 = 0;

        int op2 = 0;

        boolean mFlag = true;

        int i = 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;

            }

        }

  

        return ret;

    }

 

2.

/*
      * 输入字符串长度,字符串,计数m。从前往后技术,当数道m个元素时,m个元素出列,同时将该元素赋值给m,
      * 然后从下一个数计数循环,直到所有数字都出列位置,给定的数全部为大于0的数字。
      * 输出出队队列
      */
     public String getOutString( int len, String str, int m) {
         StringBuffer sBuffer = new StringBuffer( "" );
         String[] myStr = str.split( "," );
         int [] myInt = new int [len];
         int myLen = len;
         int nNum = m % myLen;
         int temp = 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( "," );
         }
  
         return sBuffer.toString();
     }

 

3.

/*
      * 输入字符串长度,字符串。从后向前比较,以最短字符串为标准 输出不同的元素的个数
      */
     public int getDiffNum( int len1, String str1, int len2, String str2) {
         int myCount = 0 ;
         int myLen = 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;
             }
         }
  
         return myCount;
     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值