JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで合計がnとなる連続する3つの自然数を見つける方法

問題の概要

数値nを受け取り、その合計がnと等しくなるような3つの連続する自然数(小数・浮動小数点数ではなく整数)が存在するかどうかを判定するJavaScript関数を作成します。該当する数値が存在すればそれらを返し、存在しない場合はfalseを返します。

解法の考え方

連続する3つの自然数を x、x+1、x+2 とおくと、その合計は次のように表されます。

x + (x + 1) + (x + 2) = 3x + 3

この式から、合計nが3で割り切れる場合に限り、答えとなる3つの数値が存在することが分かります。さらに、連続する自然数の最小の組み合わせは 1 + 2 + 3 = 6 であるため、nが6未満の場合も解は存在しません。これらの条件を使うと、答えの最初の数値は (n − 3) ÷ 3 として簡単に求められます。

コード例

このロジックを実装したコードは以下の通りです。

const sum = 54;
const threeConsecutiveSum = sum => {
    if(sum < 6 || sum % 3 !== 0){
        return false;
    }
    // 3つの数値は次の形式で表される:
    // x + (x + 1) + (x + 2) = 3 * x + 3
    const residue = sum - 3;
    const num = residue / 3;
    return [num, num+1, num+2];
};
console.log(threeConsecutiveSum(sum));

実行結果

コンソールには以下の出力が表示されます。

[ 17, 18, 19 ]

実際に確認すると、17 + 18 + 19 = 54 となり、条件を満たしていることが分かります。このように、数学的な性質を利用することで、ループ処理を行わずにO(1)の計算量で効率的に答えを導き出せます。

  1. JavaScriptで目標の平均値を達成するために必要な数値を求める方法

    この記事では、JavaScriptを使って「配列にあと1つ数値を追加したときに、その平均値が指定した目標値と一致するような数」を求める方法を解説します。 問題の概要 数値の配列と、単一の数値(目標平均値)を受け取るJavaScript関数を作成します。 この関数は、その数値を配列に追加することで、配列全体の平均が第2引数で指定された値と等しくなるように、追加すべき数値を返す必要があります。 解決の考え方 平均値の定義に立ち返ると、答えは簡単な算術で導き出せます。 まず現在の配列の合計値を求めます。 新しい要素を1つ追加すると、配列の長さは「元の長さ + 1」になります。 目標平均 × 新しい

  2. C++で正整数Nを連続する正整数の和として表す方法の数を求める

    正整数 N が与えられたとき、N を「1 つ以上の連続する正整数の和」として表現できるパターンが何通りあるかを求める問題を考えます。例として、入力が 10 の場合を考えてみましょう。10 は次の 2 通りで表現できます。10 = 1 + 2 + 3 + 4(4 つの連続する整数の和)10 = 10(数そのもの 1 つ)したがって、この場合の出力は 2 となります。解法の考え方N を「a から始まる i 個の連続する正整数の和」として表すことを、数学的に整理してみます。a + (a + 1) + ... + (a + i − 1) = i × a + i × (i − 1) / 2 = Nこの式