17题:收到N个鸡蛋,每个鸡蛋各有重量,找出M个重量差距最小的鸡蛋摆出一盒出售,输出最重一盒鸡蛋的总重量。
输入:
8 4
11 9 12 5 10 19 8 6
输出:
42
-
思路:要找出M个重量差距最小的放在一盒(即一组),可以先将所有鸡蛋的重量(数组中所有元素)从小到大排序,找出每组的最大值 - 最小值,其中差值最小的且数组元素总和最大的一组即为所求,输出这组的元素总和。
-
实现步骤:
- 将数组进行排序(采用了快速排序,具体讲解请见另一篇博文)
- 将N- M + 1组的差值保存在abs数组
- 找出abs数组的最小值(与排序后nums的索引相同)
- 上面找出的最小值可能有多个元素相同为最小值,从后向前遍历abs数组,找到最小值的那组nums元素,输出它们的和。
- 题目要求输入的N和M是整数,鸡蛋重量和最后的输出都是浮点型,输出结果保留两位小数。
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str1 = sc.nextLine(); String str2 = sc.nextLine(); String[] num = str1.split(" "); int N = Integer.parseInt(num[0]); int M = Integer.parseInt(num[1]); String[] ff = str2.split(" "); float[] nums = new float[N]; for(int i = 0; i < N; i++){ nums[i] = Float.parseFloat(ff[i]); } // Arrays.sort(nums); quickSort(nums,0,nums.length - 1); float res = 0; //M个重量差距最小 即找出最小差值 float[] abs = new float[N - M + 1]; for(int i = 0; i < N - M + 1; i++){ abs[i] = nums[i + M - 1] - nums[i]; } //找出abs中的最小值 float min = abs[0]; for(int i = 0; i < abs.length; i++){ if(abs[i] < min){ min = abs[i]; } } //返回abs[i]中元素的和 for(int i = abs.length - 1; i >= 0 ; i--){ if(min == abs[i]){ //3-6 N=8 M=4 i=6 for(int j = i + (N - M -1); j >= i ; j--){ res += nums[j]; } break; } } //题目要求结果保留两位小数 DecimalFormat fnum = new DecimalFormat("##0.00"); String dd = fnum.format(res); System.out.println(dd); } //快速排序 public static void quickSort(float[] nums, int start, int end) { //数组有多个元素进行排序 if (start < end) { float base = nums[start];//以要进行排序数组第0个元素为base int left = start;//左指针 int right = end;//右指针 while (left < right) { //从右向左找,比base大,right-- while (left< right && nums[right] >= base) { right--; } //比base小,替换left所在位置的数字 nums[left] = nums[right]; //从左向右找,比base小,left++ while (left < right && nums[left] <= base){ left++; } //比base大,替换right所在位置的数字 nums[right] = nums[left]; } //交换base与此时left、right指向的元素 float temp = nums[left]; nums[left] = base;//此时left=right,用base替换这个位置的数字 base = temp; //排列比base小的数字的数组 quickSort(nums, start, left - 1); //排列比base大的数字的数组 quickSort(nums, left + 1, end); } } }
-
运行结果: