2017-01-30 9 views
-4

整数n、lおよびrが与えられた場合、nをAとBの2つの整数の和として表す方法の数を見つけ、l≦A≦B≦rとします。Count Sum of Representation

についてN = 6、L = 2およびr = 4、出力

countSumOfTwoRepresentations2(n, l, r) = 2. 

なければならない2≤A A + Bとして6を書き込むためのちょうど2つの方法があります。 ≤B≤4:6 = 2 + 4と3 = 6 + 3

対処:

int countSumOfTwoRepresentations2(int n, int l, int r) 
{ 
    int count = 0; 
    int n1 = l; 
    int n2 = r; 

    while (n1 <= n2) { 
     while (n1 <= n2) { 
      if (n1 + n2 == n) { 
       count++; 
      } 
      n2--; 
     } 
     n1++; 
     n2 = r; 
    } 

    return count; 
} 

この溶液execuためにあまりにも多くの時間がかかりループ中の2つのwhileループに起因する。誰かがそれに対してより良い解決策を提案するか、私のコードにどのような変更を加えるべきか

+6

ご質問はありますか? –

+0

私のマシンで実行時間がどれほど遅いと考えられるかは、155μsでわかりません – davedwards

+1

[2つの整数の境界を表すnの表現方法の数を見つける](http://stackoverflow.com/質問/ 39860021 /方法の数を見つけようとすると境界の2分の1の整数として) – Floern

答えて

0

数式で計算できるようです。注記lはレターエルです。

x = int((n-l)/2) 

if(!(n%2) && (n-l)%2) 
{ 
    x = x + 1 
} 
+0

はnが偶数であるかどうかによって調整する必要があるようです。 – Shiping

+0

これはlからlとr(r = n - l)の範囲の中間までの値しか取れないという考えに基づいています。 – Shiping

関連する問題