华为OD机试(2022/04/26 )
第一题
记不清了,不过很简单。
第二题
输入一串以英文逗号分隔的整数,整数中每个数字代表该轮能获得多少分, 如果不参加该轮则得分要退回到三局前的分数(前面没有三局则得分置0), 计算参赛者能获得到的最高分是多少 例如: 输入:1,-5,-6,4,3,6,-2 输出: 11 解释: 1 参赛,总分1分 -5(如果参赛总分为1+(-4),不参赛总分为0)故不参赛,总分0分 -6 不参赛 总分0分 4 参赛 总分4分3 参赛 总分 7分6 参赛 总分13分-2 参赛 总分11分
下面是我的代码,通过95%的用例
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); String[] split = s.split(","); int[] arr = new int[split.length]; for (int i = 0; i < split.length; i++) { arr[i] = Integer.parseInt(split[i]); } int sum = 0; int len = arr.length; int[] dp = new int[len]; dp[0] = arr[0]; sum = dp[0]; for (int i = 1; i < len; i++) { if (i == 1) { dp[1] = Math.max(dp[0] + arr[i], 0); sum = Math.max(dp[1], 0); } else if (i == 2) { dp[2] = Math.max(dp[1] + arr[i], 0); sum = Math.max(dp[2], 0); } else { dp[i] = Math.max(dp[i - 3], dp[i - 1] + arr[i]); sum = dp[i]; } } System.out.println(sum); } }
第三题
第一行输入一串以空格分隔的字符串 第二行 输入一个匹配字符串(“.”代表单个任意字符,“*”代表0个或多个字符) 输出每个以空格分隔的字符串是否与匹配字符串相匹配,匹配的话输出它的下标,不匹配则不输出 输入: ab abc bsd .* 输出: 0,1,2 输入: avd adb sss as adb 输出: 1#华为od##笔试题目##华为#