2011华为上机试题-Java

    今天闲着没事做,就把7号那天做的机试做了一遍。最主要是做了最后一个题。都是延续当时考试的思路来做的,没有想更好的解法,只是想看看当时的第一思维方法是不是正确的……忘大神们不要见笑。写的比较龊,请多多指正,特别是如果有bug,请指正。用的是Java实现的,公司只有Eclipse,而且,Java做起来也要简单点,另外要装VS得申请 —_—

      第一题

/*
     * 输入字符串长度,字符串。从后向前比较,以最短字符串为标准 输出不同的元素的个数
     */
    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;
    }

  

  第二题

/*
     * 输入字符串长度,字符串,计数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*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;
    }

  

转载于:https://www.cnblogs.com/fresh1985/archive/2011/09/13/2174861.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值