昨晚11:38收到邮件,通知今天早上9点半到十点半开始Online Test,幸苦本人有晚睡的好习惯,才没有错过,在微博上看到了不少同学的吐槽,晚上11点睡了,早上10点才起的。从这点看,感觉一点都不像一个好企业,对未来的员工这个态度,对用户能好到哪里去,嘿嘿,略微吐槽一下。。
Online Test 一共三题,都是编程题,两个小时时间,由于本人第一次参加在线大题,所以经验不足,只完成了一道题,第二题在后面写出来了,但时间已经不够了,没来得及提交,感觉还是没准备好,个人感觉第二天较为容易点,第一题麻烦点。至于第三题,匆忙看了遍题目。。木有懂。。。
下面把题目和我的解答贴一下,看到的同志多多指点。
第一题,给一个0到999999间的数字,输出它的英文读法,eg:input 1 output one
public static void main(String[] args) {
int t1, t2;int num = 5029;
String r = "";
t1 = num / 1000;
t2 = num % 1000;
if (t1 != 0) {
if (t2/100 == 0) {
r = read(t1) + " thousand and " + read(t2);
}else {
r = read(t1) + " thousand " + read(t2);
}
} else {
r = read(t2);
} System.out.println(r);}
public static void main(String[] args) {private static String read(int i) { int h1, h2, h3; h1 = i / 100; h2 = (i % 100) / 10; h3 = i % 10; String r = ""; if (h1 != 0) { r += pronounce(h1) + " " + "hundred"; } if (h2 != 0 && h2 != 1) { if (h1 != 0) { r += " and " + pronounce(h2 * 10) + " "; } else { r += pronounce(h2 * 10) + " "; } } else { if (h2 == 0 && h3==0) { return r; } if (h1 != 0) { r += " and " + pronounce(h2 * 10 + h3); } else { r += pronounce(h2 * 10 + h3); } return r; } if (h3 != 0) { if (h1 != 0 && h2 != 0) { r += pronounce(h3); } else if (h1 == 0 && h2 != 0) { r += pronounce(h3); } else { r += " and " + pronounce(h3); } } return r; } private static String pronounce(int num) { switch (num) { case 1: return "one"; case 2: return "two"; case 3: return "three"; case 4: return "four"; case 5: return "five"; case 6: return "six"; case 7: return "seven"; case 8: return "eight"; case 9: return "nine"; case 10: return "ten"; case 11: return "eleven"; case 12: return "twelve"; case 13: return "thirteen"; case 14: return "fourteen"; case 15: return "fifteen"; case 16: return "sixteen"; case 17: return "seventeen"; case 18: return "eighteen"; case 19: return "nineteen"; case 20: return "twenty"; case 30: return "thirty"; case 40: return "forty"; case 50: return "fifty"; case 60: return "sixty"; case 70: return "seventy"; case 80: return "eighty"; case 90: return "ninety"; default: return ""; } }
第二题,逻辑推理的实现,输入条件A>B B>C,结果A>C,验证结果是否正确,具体有还有其他几种形式(eg:条件A,D>B B>C 结果A,B>C ),我用了hashmap,将条件都拆分后存进去,然后按照结果来取看是否成立。代码如下:
String cont = "A,D>B B>C";
String result = "A,B>C D>C C>A";
HashMap<String, String> map = new HashMap<String, String>();
String[] con = cont.split(" ");
for (int i = 0; i < con.length; i++) {
String[] tmp = con[i].split(">");
if (tmp.length > 1) {
String[] front = tmp[0].split(",");
for (int j = 0; j < front.length; j++) {
map.put(front[j], tmp[1]);
}
}
}
String[] res = result.split(" ");
for (int i = 0; i < res.length; i++) {
String[] tmp = res[i].split(">");
if (tmp.length > 1) {
String[] front = tmp[0].split(",");
Boolean[] t = new Boolean[front.length];
for (int j = 0; j < front.length; j++) {
String key = front[j];
while (map.get(key) != null) {
if (map.get(key).equals(tmp[1])) {
t[j] = true;
}
key = map.get(key);
}
if (t[j]==null) {
t[j] = false;
}
}
boolean b = true;
for (int j = 0; j < t.length; j++) {
b = b&&t[j];
}
System.out.println(b);
}
}
最后很遗憾的就是只答了一题,不过test case都通过了,不知道有没有下一轮的机会。。。