题目描述:小明今天收了N个鸡蛋,每个鸡蛋各有重量,现在小明想找M个重量差距最小的鸡蛋摆成一盒出售,输出符合条件的最重一盒鸡蛋的总重量。(JAVA)

题目描述

小明今天收了N个鸡蛋,每个鸡蛋各有重量,现在小明想找M个重量差距最小的鸡蛋摆成一盒出售,输出符合条件的最重一盒鸡蛋的总重量.。

输入说明

第一行,用空格分隔的2个整数,分别表示鸡蛋个数N(N<1000)和每盒个数M(M<N);

第二行,N个鸡蛋重量(浮点)。

输出说明

1行,符合条件的最重一盒鸡蛋的总重量(保留2位小数)

输入样例复制

8 4

11 9 12 5 10 19 8 6

输出样例复制

42.00

import java.util.*;

public class Main{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();
      int m = sc.nextInt();
     double[] num = new double[n];
      for(int i=0;i<n;i++){
			num[i]=sc.nextDouble();
      }
      Arrays.sort(num);
      double maxSum = 0;
      double minDifferValue = Double.MAX_VALUE;
      for(int i=0;i<n-m;i++){
        double sum = 0;
    //数组排好序后M为一组,一组差距值为这一 组末尾元素减这一组第一个                                       
        double differValue = num[i+m-1]-num[i];                                                                         
        for(int j = 0;j<m;j++){
          sum+=num[j+i];
        }
        if(differValue<=minDifferValue){
          maxSum = sum;
          minDifferValue=differValue;
        }
      }
     System.out.print(String.format("%.2f",maxSum)); 
    }
}

### 回答1: 小明家共有x+y个鸡蛋。根据题意可得: x ≡ 1 (mod 3) x ≡ z (mod 5) x ≡ 3 (mod 7) 由于3、5、7互质,根据中国剩余定理,可以求出x的最小正整数解为: x = 52a + 1 其中a为正整数。 因为x是满足条件的最小数,所以x必须大于等于y,即: x + y ≥ x = 52a + 1 所以: y ≥ 52a + 1 - x 将x ≡ 1 (mod 3)代入得: x = 3b + 1 其中b为正整数。 将x ≡ z (mod 5)代入得: x = 5c + z 其中c为正整数。 将x ≡ 3 (mod 7)代入得: x = 7d + 3 其中d为正整数。 将以上四个式子联立,得到: 52a + 1 = 105e + 22z 其中e为正整数。 因为a是正整数,所以22z必须是偶数,即z必须是偶数。 又因为x是满足条件的最小数,所以a、b、c、d、e都必须是正整数且最小。 根据以上条件,可以列出z的取值范围: z = 2, 12, 22, 32, 42, 52 将z的每个取值代入上式,得到: a = 5, 31, 57, 83, 109, 135 b = 2, 8, 14, 20, 26, 32 c = 1, 6, 11, 16, 21, 26 d = 3, 10, 17, 24, 31, 38 e = 1, 2, 3, 4, 5, 6 将a的每个取值代入x = 52a + 1,得到x的每个取值: x = 261, 1605, 2949, 4293, 5637, 6981 将x的每个取值代入y ≥ 52a + 1 - x,得到y的每个取值: y ≥ 1, 47, 91, 135, 179, 223 因为y必须是正整数且最小,所以y的取值为: y = 47 所以小明家共有: x + y = 1605 + 47 = 1652 个鸡蛋。 ### 回答2: 题目中给出了小明家原有鸡蛋的个数x满足“三个三个的数剩1个,5个5个数剩z个,7个7个数剩3个”,所以可以列出如下方程组: x ≡ 1 (mod 3) x ≡ z (mod 5) x ≡ 3 (mod 7) 其中,≡表示同余。我们可以通过求解这个方程组来确定小明家原有鸡蛋的个数x。 利用中国剩余定理,可以将上述方程组转化为: x ≡ a1 (mod m1) x ≡ a2 (mod m2) x ≡ a3 (mod m3) 其中, a1 = 1,m1 = 3 a2 = z,m2 = 5 a3 = 3,m3 = 7 由于m1、m2、m3互质,因此存在一组唯一解。可以利用扩展欧几里得算法求得模数之间的乘法逆元,从而求出中国剩余定理的解。 将y个新鸡蛋加入小明家的存货中,得到最终的鸡蛋数量为 x + y。 因此,小明家共有 x + y 个鸡蛋。 ### 回答3: 根据题意可得到以下方程组: x ≡ 1 (mod 3) x ≡ z (mod 5) x ≡ 3 (mod 7) 我们可以通过中国剩余定理来求解,将每个同余方程的系数相乘得到 M = 3 × 5 × 7 = 105,然后求出 M/3, M/5 和 M/7 在模对应系数下的逆元 t3, t5 和 t7,再将它们乘以对应的同余方程系数和余数,相加后再对 M 取模,得到解 x。 具体计算过程如下: M = 3 × 5 × 7 = 105 t3 = 70, t5 = 63, t7 = 15 x = (1×t3×35 + z×t5×21 + 3×t7×15) mod 105 化简可得:x = 53z + 22 (mod 105) 因为 y 和 x 都是整数,所以当 x + y 是 3 的倍数时,有 y ≡ 0 (mod 3);是 5 的倍数时,有 y ≡ 0 (mod 5);是 7 的倍数时,有 y ≡ 0 (mod 7)。 因此,我们可以定义一个新的变量 k,使得 x+y+ky 是 3、5、7 的公倍数,即: x + y + ky ≡ 0 (mod 3) x + y + ky ≡ 0 (mod 5) x + y + ky ≡ 0 (mod 7) 根据同余方程的性质,可以得到: ky ≡ (2z + 3) (mod 3) ky ≡ (2x + 3) (mod 5) ky ≡ (4x + 4z + 3) (mod 7) 可以求出 k 在模对应系数下的逆元 t3', t5' 和 t7',然后将它们乘以对应的同余方程系数和余数,相加后再对 M 取模,得到解 k。 具体计算过程如下: t3' = 2, t5' = 3, t7' = 6 k = (t3'×(2z+3)×35 + t5'×(2x+3)×21 + t7'×(4x+4z+3)×15) mod 105 化简可得:k = 29x + 68z + 27 (mod 105) 将 k 的值代入上面的方程中得到:x + y = 105n + 53z + 22 - 29x - 68z - 27n 化简可得:y = 78n - 26x - 15z 因为 y 是整数,所以可以将上式中的 n 设为 1,得到:y = 78 - 26x - 15z 将 y 和 x 的表达式代入第一个同余方程中,得到: 53z + 22 + y ≡ 1 (mod 3) 化简可得:z + y ≡ 2 (mod 3) 因为 y 的表达式中不含 z,所以我们可以将 z 看作是独立于 y 的变量,然后解出使得 z + y ≡ 2 (mod 3) 的最小正整数解 z0。将 z0 带入 y 的表达式中,即可得到小明家的鸡蛋总量 x+y+z0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值