笔试时间:2023年7月15日 非凡计划 第一题 题目:小y删数字 给定一个长度为n的数组,数组元素为a1, a2, . . , an,每次能删除任意a的任意一位,求将所有数字变成0最少需要几步。例如103若删除第1位则变成3;若删除第2位则变成13;若删除第3位则变成10。 输入描述 第一行一个正整数n代表数组长度。接下来一行n个数第j个数代表a。 1≤n ≤10^5 0≤ai≤10^9 输出描述 输出一行一个数代表答案。 样例输入 5 10 13 22 100 30 样例输出 7 参考题解 遍历nums中的每个数字,得到不为0的数位即可。 Java: import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = sc.nextInt(); } int cnt = 0; for (int num : nums) { while (num > 0) { if (num % 10 != 0) cnt++; num /= 10; } } System.out.println(cnt); }} 第二题 题目:小红的字符串切割 小红拿到了一个字符串,她希望你帮她切割成若干子串,满足以下两个条件: 1、子串长度均为不小于3的奇数。 2、子串内部的字符全部相同。 输入描述 第一行输入一个正整数n,代表字符串长度。第二行输入一个字符串,仅由小写字母组成。1 <n ≤200000 输出描述 如果无解,请输出-1。否则按顺序输出若干个字符串,用空格隔开。 样例输入 8 aaabbbbb 样例输出 aaa bbbbb 参考题解 Java: import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); char[] cs = sc.nextLine().toCharArray(); // 记录每个相同字符的子串的字符数量 List<String> list = new LinkedList<>(); char pre = '.'; StringBuilder sb = new StringBuilder(); for (int i = 0; i < cs.length; i++) { if (pre == '.' || cs[i] == pre) { pre = cs[i]; sb.append(cs[i]); } else { list.add(sb.toString()); sb = new StringBuilder(); pre =