首页 > 8月23日腾讯后台笔试
头像
PraveZhang
编辑于 2020-08-23 22:08
+ 关注

8月23日腾讯后台笔试

第一题

输入n表示数组长度,输入k表示删除数组第k个元素,输入n个数表示数组,要求输出删后的数组。(原题是链表)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            if(i == k-1) {
                int tem = scanner.nextInt();
                continue;
            }
            sb.append(scanner.nextInt()).append(" ");
        }
        System.out.println(sb.toString().trim());
    }
}

第二题

找字典序第k小的子串。因为k<=5,所以从头遍历即可。

import java.util.Scanner;

// 100%
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        int k = scanner.nextInt();
        // 按字典序增加寻找
        // 找到了就加a,找不到就重新开始加
        String find = "a";
        int got = 0 ;

        while(true){
            int index = s.indexOf(find);
            while(index != -1){
                got ++;
                if(got == k)
                    break;
                find += 'a';
                index = s.indexOf(find);
            }
            if(got == k)
                break;
            find = lastAlphabetPlusOne(find);
        }
        System.out.println(find);

    }
    // 如果az都没有,那么就该b了吧
    private static String lastAlphabetPlusOne(String s){
        int length = s.length();
        if(s.endsWith("z"))
            return s.substring(0,length-2) + (
                    ((char)(s.charAt(length-2)+1))
                    );
        return s.substring(0, length -1) + ((char)(s.charAt(length -1)+1));
    }
}

第三题

把n拆成俩数,使俩数的每一位和加起来最大。注意n会超过int。使用long

import java.util.Scanner;
// 100%
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int times = scanner.nextInt();
        for (int i = 0; i < times; i++) {
            long n = scanner.nextLong();
            int nines = String.valueOf(n).length()-1;
            long va1 = make9(nines);
            long va2 = n - va1;
            System.out.println(a(va1) + a(va2));
        }
    }

    private static long make9(int nines) {
        long res = 0;
        while(nines-->0) {
            res *=10;
            res += 9;
        }
        return res;
    }

    private static int a (long n){
        String s = Long.toString(n);
        int sum =0;
        for (char c: s.toCharArray()){
            sum += (c-48);
        }
        return sum;
    }
}

第四题

有n条板子长短不一,可以选择竖着一次刷一条板,也可以选择横着一次刷所有,但是如果中间断了就算刷两次。比如3 0 3横着刷,刷剩下2 0 2 这需要刷两次完成,因为中间断了。
给你板子长度,问最少多少次刷完。
没做出来

第五题

给你一个串,和n次测试,每次测试给两个数字a和b:
串从a到b的子串,最少可以分成多少个回文串。
比如 ababa,查1,4
得到abab,拆成aba和b两个回文,结果2。
暴力10%,没做出来。

全部评论

(8) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐