今天闲着没事做,就把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;
}