2016-09-18 22 views
-8

n1からn2までのすべての正の数を合計して変数nに格納するプログラムを作成します。あなたのプログラムは、 "n2 - n1の数の合計は"というメッセージの後に、合計(n)の値が続くはずです。Javaの与えられた整数の範囲の和を求める(正のみ)

は今、これは私のコードです:

/*ここにコードを書く*/

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

+1

n1> n2の場合はどうなりますか? – Eran

+4

受け入れないとはどういう意味ですか? –

+0

テストケースが質問されていることがわかりません! –

答えて

0

それはあなたが追加する必要が唯一の正の数なので、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; 

    } 
} 
+0

テストケースは引き続き通過しません! –

+0

'n1'と' n2'に関する質問にはどんな制約がありますか? – pahan

+0

今すぐ上の画像を見てください! –

-1

あなたがからBまでの範囲内の整数を合計したい場合は(包括; aとbが負、正であることを認めて、< = B)、シリーズとしてそれを考慮してください。

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の場合は、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)); 
    } 
} 
関連する問題