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; }