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%,没做出来。