某电商的机试题目

某电商的机试题目,对外宣称80%的程序员拿过ACM 奖项

 

第一道题目: 字符串分割,不准使用系统自带的分割函数。

public class Myspilt {

    public static void main(String[] args) {

        String source = "abcdabeefabfgeeabcfffdsfsa";    // abcdabeefabfgeeabcfffdsfsa
        String target = "ab";
        myspilt(source, target);

    }


    public static void myspilt(String source, String target) {

        char[] sourceCharArray = source.toCharArray();
        char[] targetCharArray = target.toCharArray();

        StringBuffer stringBuffer = new StringBuffer();

        List<String> result = new ArrayList<>();

        for (int i = 0; i < source.length(); i++) {

            int j = 0;
            for (; j < target.length() && i + j < source.length(); j++) {
                if (sourceCharArray[i + j] != targetCharArray[j]) {
                    break;
                }
            }

            if (j == targetCharArray.length) {
                if (stringBuffer.length() > 0) {
                    result.add(stringBuffer.toString());
                    stringBuffer.setLength(0);
                }

                i = i + j - 1;
            } else {
                stringBuffer.append(sourceCharArray[i]);
            }
        }

        if (stringBuffer.length() > 0) {
            result.add(stringBuffer.toString());
        }

        System.out.println("end");
    }

}

 

第二道题目: 大整数相减,不准使用系统自带的BigInteger 来计算。

 

class App1 {

    //       计算 a - b

    public static void main(String[] args) {

        String a = "454656875457421545474578457";
        String b = "12454578787878454744545454578454578474516938271458457214";
        mySubtract(a, b);

        String a1 = "1000000000000000000";
        String b1 = "999999999";
        mySubtract(a1, b1);
    }


    public static void mySubtract(String a, String b) {

        BigInteger a1 = new BigInteger(a);
        BigInteger b1 = new BigInteger(b);
        System.out.println(a1.subtract(b1).toString());

        boolean altb = false;

        if (a.length() < b.length() || (a.length() == b.length() && a.compareTo(b) < 0)) {
            altb = true;
            String tmp = a;
            a = b;
            b = tmp;
        }

        boolean borrow = false;
        StringBuilder sb = new StringBuilder(a.length());

        for (int i = a.length() - 1, j = b.length() - 1; i >= 0; i--, j--) {

            char char1 = a.charAt(i);
            char char2 = '0';
            if (j >= 0) {
                char2 = b.charAt(j);
            }

            if (borrow) {
                char1--;
            }

            if (char1 < char2) {
                borrow = true;
                sb.append(char1 + 10 - char2);
            } else {
                borrow = false;
                sb.append(char1 - char2);
            }
        }

        String result = sb.reverse().toString();
        result = result.replaceAll("^[0]+", "");

        if(result.length() == 0){
            result = "0" ;
        }

        if (altb) {
            result = "-" + result;
        }

        System.out.println(result);
    }
}

 

不准上网, 50分钟。 其实感觉实战这两题都不怎么好完成, 过了机试才有笔试的机会。

转载于:https://my.oschina.net/qidis/blog/3072373

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值