从1到N的数字的最大和,避免了所有得到K的和

时间:2019-09-18 07:40:55

标签: java

我知道运动的踪迹是模棱两可的,但我是从网上挑战赛中获得这一挑战的。

我不知道该如何解决。我想知道如何解决以及解决此类问题所需学习的知识。

鉴于数字N和K(均为整数),我必须创建一个方法,将最大和从1返回到N,避免所有产生K的和。

这里是一个例子:  N = 4和K = 4 得出k = 1 + 3,4 + 0的总和。 (每个总和只能考虑一次,因此3 + 1等于1 + 3,而且每个数字都必须取一次,所以我们不能做1 + 1 + 1 + 1)。

N的最大和为= 2 + 3 + 4 = 9。

3 个答案:

答案 0 :(得分:0)

您的描述相当混乱。我相信这就是您要实现的目标。

        public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
        int n = 0;
        int k;
        ArrayList<Integer> nums = new ArrayList<>();
        int sum = 0;

        System.out.println( "Please enter a value for n" );
        n = s.nextInt();
        System.out.println( "Please enter a value for k" );
        k = s.nextInt();

        for(int i = 0; i < n; i++) {
            if(( i + n ) != k) {
                nums.add( i );
            }else {
                System.out.println( "Sum equal to value of K, sum skipped." );
            }

        }
        for (int value : nums) {
            sum += value;
        }
        System.out.print( sum );           
    }  

答案 1 :(得分:0)

好吧,由于您没有付出任何努力(抱歉,代码丢失),所以我只能为您提供必要的步骤,您必须使用这些步骤自己编写代码:

  1. 写一个方法public int getMaxSumNotEqualToK(int n, int k)或简单命名
  2. 创建一个仅包含唯一值的数据结构,我建议使用Set<Integer>
  3. 使用循环以便将每个数字与0n范围内的所有其他数字求和,我使用了两个for循环
  4. 如果它们不等于Set<Integer>,则将它们添加到k
  5. 返回Set中最大的数字

请注意,这也可以通过许多不同的方式完成,这只是一个示例。

答案 2 :(得分:0)

这是一个非常简单的任务:

public static int getMaxSum(int n, int k) {
    int max = 0;

    for (int i = 1; i <= n; i++) {
        int sum = 1;

        for (int l = 1, r = 1; r <= n; ) {
            if (r - l + 1 == i) {
                max = Math.max(max, sum == k ? max : sum);
                sum += ++r;
                sum -= l++;
            } else
                sum += ++r;
        }
    }

    return max;
}