4.11webank笔试情况
选择题40分,三个编程题60分。
第一题,将数字转为16进制然后看里面字母的数量。
public class Solution1 { @Test public void myTest() { } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); String str = Integer.toHexString(x); int res = 0; for (int i = 0; i < str.length(); i++) { if (Character.isLetter(str.charAt(i))) res++; } System.out.println(res); } }
第二题,给一个数组,看左边x和右边y以内是否是最小值,是的话输出第一个就行了。比如下面的输出位置4(从1开始).
//10 2 3 //10 8 7 1 9 2 6 4 3 5 //6 2 2 // //10 8 2 7 3 1 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(), x = sc.nextInt(), y = sc.nextInt(); int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = sc.nextInt(); } for (int i = 0; i < n; i++) { int flag1 = 1, flag2 = 1; int cur = nums[i]; int left = i - 1, right = i + 1, left_n = x, right_n = y; while (left >= 0 && left_n != 0) { if (nums[left] <= cur) { flag1 = 0; break; } left--; left_n--; } while (right < n && right_n != 0) { if (nums[right] <= cur) { flag2 = 0; break; } right++; right_n--; } if (flag1 == 0 || flag2 == 0) continue; else { System.out.println(i + 1); break; } } }第三题,给n为长度的字符串,判断其子串(i到j的字符串)能被k整除的个数,比如3为字符串,121,字串由1,12,121,2,21,1共六个,k是3的话,12,21可以被3整除,所以返回2.
前面所有加起来也没有半小时,后面一个半小时全在做这道题,最开始只能过9%,想了半天发现字符长度1000可能会超时,关键牛客这次超时这种运行时错误没提醒,我就一直以为代码问题,改了改最后只能过27%。
public class Solution3 { @Test public void myTest() { long x = Long.parseLong("122222222222"); System.out.println(x); } /*小明有一个长度为n的仅由0到9组成的字符串。小美想知道这个串里有多少个子串代表的十进制数能被k整除。 字符串a的子串即是那些可被描述为“由a中第i至第j个字符组成的字符串”的串。 如字符串‘121’有‘1’,‘2’,‘1’,‘12’,‘21’,‘121’六个子串。 输出一个整数,代表给出的数字串中有多少个子串满足其对应的十进制数能被k整除。 如样例中的‘1101’,‘012’,‘12’,‘0’都能被3整除。 如输入:5 3 11012 输出 4 n(1<=n<=1000),k(1<=k<=1000) ‘1101’,‘012’,‘12’,‘0’ */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(), k = sc.nextInt(); String str = sc.next(); long res = 0; for (int i = 0; i < str.length(); i++) { long x = 0; for (int j = i; j < str.length(); j++) { x = x * 10 + (str.charAt(j) - '0'); if (x % k == 0) res++; } } System.out.println(res); } } }