【问题标题】:Finding sum of a given range of integers (positive only) in Java在Java中查找给定整数范围的总和(仅正数)
【发布时间】:2017-01-26 01:22:30
【问题描述】:

编写一个程序,对从 n1 到 n2 的所有正数求和,并存储在变量 n 中。您的程序应该打印消息“n2 - n1 个数字的总和是”,然后是总和 (n) 的值。

现在这是我的代码:

/*在这里写你的代码*/

import java.util.Scanner;
class NumSum{
    public static void main(String args[]){
       int n=0;           
       System.out.println("The sum of n2-n1 numbers is "+sum(n));
    }
    public static int sum(int n){
         int n1,n2;

         Scanner sc=new Scanner(System.in);
         n1=sc.nextInt();
         n2=sc.nextInt();
         int a=n1;
         n=n2-n1+1;
         int d=1;
         int x=0;
         //if(n1>0&&n2>0){
           // for(int i=n1;i<=n2;i++){
           //     n+=i;
           // }
         //}else 
         if(n1<0&&n2>0){
            x=n*(2*a+(n-1)*d)/2;               
         }else if(n1>0&&n2>0){
            x=n*(2*a+(n-1)*d)/2;
         }else if(n1<0&&n2<0){
            x=0;
         }else if(n1>0&&n2<0){
            x=0;
         }
         return x;
    }
}

但它不接受上述问题中给出的测试用例? 有人可以帮忙吗?

enter image description here

【问题讨论】:

  • 不接受是什么意思?
  • 我不知道测试用例是什么问题!
  • n1n2的值在哪里输入??还有为什么main方法里面有个很大的空格???
  • 在函数sum()中
  • n 到底在做什么?您希望通过sum(0) 实现什么目标?

标签: java integer formula


【解决方案1】:

如果要对 a 到 b 范围内的整数求和(包括;a 和 b 允许为正、负;a

    a+0, a+1, a+2, .... a+k (b is conviniently termed as a+k)

部分可以总结为:

    (k+1)*a + k(k+1)/2

消除k,得到公式:

    [(b-a+1)(a+b)]/2

当b>a时,需要交换a和b。

注意java的整数除法。如果您还有此处未涵盖的其他例外情况,请修改公式。

class NumSum {
   public static int sum_range(int a, int b) {
      if (a>b) return(sum_range(b,a));
      return(((b-a+1)*(a+b))/2);
   }

   public static void main(String args[]) {
      int i=Integer.parseInt(args[0]);
      int j=Integer.parseInt(args[1]);
      System.out.println("Sum: " + sum_range(i,j));
   }
}

【讨论】:

    【解决方案2】:

    由于您应该添加的只是正数,因此如果 n1 为负数,则设为 n1 = 0。求第一个 n 数字之和的公式是 (n^2+n)/2。 在应用公式之前,下限 (n1) 应减少 1,因为总和中包含限制。

    import java.util.Scanner;
    class NumSum{
        public static void main(String args[]){
    
            System.out.println("The sum of n2-n1 numbers is "+sum());
        }
        public static int sum(){
              int n1,n2;
    
             Scanner sc = new Scanner(System.in);
    
            n1=sc.nextInt();
            n2=sc.nextInt();
    
            int tmp;
    
            if(n1 > n2)
            {
               tmp = n1;
               n1 = n2;
               n2 = tmp;
            } 
    
            n1--;
    
            if(n1<0)
              n1 = 0;
            if(n2<0)
              return 0;
    
    
            int sum1 = (n1*n1 + n1)/2;
            int sum2 = (n2*n2 + n2)/2;
    
            return sum2 - sum1;
    
        }
    }
    

    【讨论】:

    • 测试用例仍未通过!
    • 问题中关于n1n2 的任何限制条件?
    • 现在看上图!
    • 您应该自己尝试一下。我希望这个问题不是来自正在进行的比赛
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2015-08-25
    • 2016-07-15
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多