笔试笔试2024得物春季笔试真题
玦尘本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
1.开幕式排练
题目描述
导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。
现在给出n个参演人员的身高,问在他们站成一圈时,相邻演员的身高差的最大值至少是多少? 请你帮忙计算。
输入描述
输入包括两行,第一行有1个正整数,代表人数 n。
第二行有n个空格隔开的正整数h表示第i个演员的身高。
数据保证2 <= n <= 1e5, 1 <= hi <= 1e9。
输出描述
输出包括一个正整数,表示答案。
输入示例
5
2 1 1 3 2
输出示例
1
提示信息
样例中按照1, 2, 3, 2, 1排列即可。
时间限制:c/c++/go:1s;其他语言:3s。
参考答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import java.util.*;
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int count = sc.nextInt(); int[] nums = new int[count]; for (int i = 0; i < count; i++) { nums[i] = sc.nextInt(); }
Arrays.sort(nums); int n = nums.length; int res = nums[1] - nums[0]; for (int i = 0; i + 2 < n; i += 2) { res = Math.max(res, nums[i + 2] - nums[i]); } for (int i = 1; i + 2 < n; i += 2) { res = Math.max(res, nums[i + 2] - nums[i]); }
System.out.println(res); } }
|
2.最少数字
题目描述
小明用计算机随机生成了N个正整数,他希望从这N个数中选取若千个数,使得它们的和等于M。这些随机生成的数字可能会相同,但是每个数字最多只允许使用一次。
当然这样的选取方案可能不存在,也可能有多个。现在希望你编写一个程序,能够找出数字个数最少的选取方案,输出对应的最少数字的个数,如果无解输出“No solution”。
输入描述
单组输入,每组输入2行。
第1行包含两个正整数N和M,分别表示初始输入的正整数个数和目标数字和(1 <= N <= 1e3,1 <= M <= 1e5)。
第2行为N个正整数,两两之间用空格隔开(每一个正整数均小于等于1e5)。
输出描述
输出数字个数最少的选取方案中所包含的最少数字个数,如果无解输出“No solution”。(注意:你不需要输出引号)
输入示例
5 5
1 3 2 1 1
输出示例
2
提示信息
选择3和2即可得到5,一共选择了两个数,所以答案是2,并且不存在更少的数。
时间限制:c/c++/go:1s;java:3s;其他语言:18s。
参考答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import java.util.*;
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int count = sc.nextInt(); int target = sc.nextInt(); int[] arr = new int[count]; for (int i = 0; i < count; i++) { arr[i] = sc.nextInt(); }
int[][] dp = new int[count + 1][target + 1]; for (int i = 0; i <= count; i++) { Arrays.fill(dp[i], target); } dp[0][0] = 0;
for (int i = 1; i <= count; i++) { for (int j = 0; j <= target; j++) { dp[i][j] = dp[i - 1][j]; if (j >= arr[i - 1]) { dp[i][j] = Math.min(dp[i][j], dp[i - 1][j - arr[i - 1]] + 1); } } }
System.out.println(dp[count][target] == target ? "No solution" : dp[count][target]); } }
|