记某逊的Online Test

     昨晚11:38收到邮件,通知今天早上9点半到十点半开始Online Test,幸苦本人有晚睡的好习惯,才没有错过,在微博上看到了不少同学的吐槽,晚上11点睡了,早上10点才起的。从这点看,感觉一点都不像一个好企业,对未来的员工这个态度,对用户能好到哪里去,嘿嘿,略微吐槽一下。。

     Online Test 一共三题,都是编程题,两个小时时间,由于本人第一次参加在线大题,所以经验不足,只完成了一道题,第二题在后面写出来了,但时间已经不够了,没来得及提交,感觉还是没准备好,个人感觉第二天较为容易点,第一题麻烦点。至于第三题,匆忙看了遍题目。。木有懂。。。

     下面把题目和我的解答贴一下,看到的同志多多指点。

     第一题,给一个0到999999间的数字,输出它的英文读法,eg:input  1  output  one

public static void main(String[] args) {     
	int num = 5029;
int t1, t2;
        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都通过了,不知道有没有下一轮的机会。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值