算法笔试题1-Java

网易2018校园招聘编程题真题集合

(1)小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。

如输入10,输出122。

import java.util.Scanner;
public class Main {
     
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);   
        int num = scanner.nextInt();
        StringBuffer sb = new StringBuffer();
        while (num > 0) {
            if (num % 2 == 1) {
                sb.append('1');
                num = (num - 1) / 2;
            } else {
                sb.append('2');
                num = (num - 2) / 2;
            }
        }
        System.out.println(sb.reverse());
    }
     
}

(2)获取一个数相反数,输出两数之和,如输入1325,输出6556

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
//此处展示了如何获取控制台输入 Scanner scanner
= new Scanner(System.in); int num = scanner.nextInt(); int r_num = 0; while (num != 0) { r_num = r_num * 10 + num % 10; num /= 10; } System.out.println(num + r_num); } } 

(3)一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:'aaa','bb','c'。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。输入"aaabbaaac",结果为(3+2+3+1) / 4 = 2.25。

import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        List<String> list = new ArrayList<String>();
        if (s.length() < 2) {
            System.out.println(String.format("%.2f", s.length()));
            return ;
        }
        char pre_c = s.charAt(0), cur_c;
        StringBuffer sb = new StringBuffer();
        sb.append(pre_c);
        for (int i = 1; i < s.length(); i++) {
            cur_c = s.charAt(i);
            if (cur_c == pre_c) {
                sb.append(cur_c);
            }
            else {
                list.add(sb.toString());
                sb = new StringBuffer("" + cur_c);
            }
            pre_c = cur_c;
        }
        list.add(sb.toString());
        int t_len = 0, t_num = 0;
        for (String ss: list) {
            t_len += ss.length();
            t_num++;
        }
        System.out.println(String.format("%.2f", t_len * 1.0 / t_num));
    }
}

 PS:看别人的代码,有简单算法,总长度就是字符串长度,短串数量就是去重后的字符串长度。

原文地址:https://www.cnblogs.com/livepeace/p/8205590.html