本文共 2498 字,大约阅读时间需要 8 分钟。
牛牛举办了一场编程比赛,共有3*n个选手参加。每个选手都有一个水平值a_i。牛牛的目标是将选手分成n组,每组3人,要求每组的水平值等于该组队员中第二高的水平值。牛牛希望通过合理分组,使得所有队伍的水平值总和最大化。
为了最大化所有队伍的水平值总和,每个队伍的第二个值应尽可能大。因此,合理的策略是将选手按水平值从小到大排序后,将最大的n个水平值放在右边的两端,中间的n个水平值放在左边。这样可以确保中间的水平值尽量大,进而使得每个队伍的第二个值最大。
import java.util.*;public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int[] array = new int[3 * n]; for (int i = 0; i < 3 * n; i++) { array[i] = scan.nextInt(); } Arrays.sort(array); long sum = 0; for (int i = 1; i < 3 * n; i++) { if (i % 4 == 0) { if (i == 3 * n - 1) { sum += array[i]; } } else { sum += array[i]; } } System.out.println(sum); }} 输入两个字符串str1和str2,从str1中删除str2中所有的字符。例如,输入“They are students.”和“aeiou”,则删除后的字符串变为“Thy r stdnts.”。
import java.util.*;public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str1 = scan.nextLine(); String str2 = scan.nextLine(); Map map = new HashMap<>(); for (int i = 0; i < str2.length(); i++) { map.put(str2.charAt(i), i); } StringBuilder sb = new StringBuilder(str1); for (int i = 0; i < sb.length(); i++) { if (!map.containsKey(sb.charAt(i))) { char c = sb.charAt(i); sb.deleteCharAt(i); } } System.out.println(sb.toString()); }} 读取一个字符串str,找出其中连续最长的数字串。
cur和ret,分别用于记录当前和最长的数字串。cur中。cur和ret的长度,保留较长的字符串,并重置cur为空。cur和ret,保留最长的数字串。import java.util.*;public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan.nextLine(); String cur = ""; String ret = ""; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch >= '0' && ch <= '9') { cur += ch; } else { if (cur.length() > ret.length()) { ret = cur; } cur = ""; } } if (cur.length() > ret.length()) { ret = cur; } System.out.println(ret); }} 转载地址:http://qsstz.baihongyu.com/