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