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

【JavaScript】偶数・奇数位置の桁の合計が指定の数で割り切れるn桁の数をすべて見つける方法

3つの数値を受け取るJavaScript関数を作成する必要があります。ここでは、それらの数値を abn と呼ぶことにします。

私たちの課題は、偶数番目の位置にある桁の合計が a で割り切れ、かつ奇数番目の位置にある桁の合計が b で割り切れる、すべての n 桁の数を見つけることです。最後に、条件を満たすすべての数値を格納した配列を返却します。該当する数値がひとつも存在しない場合は、空の配列を返します。

なお、この記事では「位置」は数値の右端(一の位)をインデックス 0 として、右から左へ数えていくものとします。

アプローチ

この問題は、以下の3つの関数に役割を分けて考えると理解しやすくなります。

  • indexSum(): 数値の各桁を右から順に再帰的に走査し、偶数インデックス(0, 2, 4…)の桁の合計 sumEven と、奇数インデックス(1, 3, 5…)の桁の合計 sumOdd をオブジェクトとして返します。
  • divides(): ある数がもう一方の数で割り切れるかどうかをブール値で判定する、シンプルなヘルパー関数です。
  • countNum(): n 桁の最小値(10n-1)から最大値(10n − 1)までのすべての整数をループで確認し、両方の条件を満たすものだけを結果配列 res に追加して返します。

コード例

以下が実際の実装例です。

const indexSum = (num, sumOdd = 0, sumEven = 0, index = 0) => {
   if (num) {
      if (index % 2 === 0) {
         sumEven += num % 10;
      } else {
         sumOdd += num % 10;
      }
      return indexSum(Math.floor(num / 10), sumOdd, sumEven, ++index);
   }
   return { sumOdd, sumEven };
};
const divides = (b, a) => a % b === 0;
const countNum = (n, first, second) => {
   let start = Math.pow(10, (n - 1));
   const end = Math.pow(10, n) - 1;
   const res = [];
   while (start <= end) {
      const { sumEven, sumOdd } = indexSum(start);
      const condition = divides(first, sumEven) && divides(second, sumOdd);
      if (condition) {
         res.push(start);
      }
      start++;
   }
   return res;
};
console.log(countNum(3, 5, 3));

出力

このコードをコンソールで実行すると、次のような出力が得られます。

[
   104, 109, 134, 139, 164, 169, 194, 199, 203,
   208, 233, 238, 263, 268, 293, 298, 302, 307,
   332, 337, 362, 367, 392, 397, 401, 406, 431,
   436, 461, 466, 491, 496, 500, 505, 530, 535,
   560, 565, 590, 595, 604, 609, 634, 639, 664,
   669, 694, 699, 703, 708, 733, 738, 763, 768,
   793, 798, 802, 807, 832, 837, 862, 867, 892,
   897, 901, 906, 931, 936, 961, 966, 991, 996
]

コードの解説

ここでは countNum(3, 5, 3) を呼び出しています。これは「3桁の数(100〜999)の中から、偶数位置(一の位・百の位)の桁の合計が 5 で割り切れ、かつ奇数位置(十の位)の桁の合計が 3 で割り切れるものをすべて求める」という意味になります。

例えば、結果の先頭にある 104 のケースを見てみましょう。

  • 偶数位置(インデックス 0 と 2)の桁は 4 と 1 なので、合計は 4 + 1 = 5 → 5 で割り切れます。
  • 奇数位置(インデックス 1)の桁は 0 なので、合計は 0 → 3 で割り切れます。

したがって、104 は条件を満たす数として結果に含まれます。同様のチェックが n 桁の全範囲に対して繰り返し行われ、条件を満たすすべての数が配列に収集されて返されます。

  1. C++で[L, R]の範囲内にある「桁の合計が3で割り切れる」偶数の個数を求める方法

    2つの整数 L と R が与えられ、範囲 [L, R] を定義します。この記事の目的は、L から R までの間に存在する偶数の中で、各桁の合計が3で割り切れる数の個数を求めることです。実現方法としては、L から R までのすべての偶数について桁の合計を計算し、その合計が3で割り切れる(sum % 3 == 0)場合にカウントを1つずつ増やしていきます。具体例で理解しましょう。例1入力 − L=10, R=20出力 − 範囲 [L, R] 内で桁の合計が3で割り切れる偶数の個数:2説明 − 10 から 20 の間の偶数は、10, 12, 14, 16, 18, 20 の6つです。このうち桁の合計

  2. Pythonで整数リストの偶数桁・奇数桁の合計を求める方法

    整数リスト内のすべての偶数桁と奇数桁の合計を求めたい場合、シンプルなループ処理と剰余演算子(%)を組み合わせることで実現できます。各数字を文字列として取り出し、2で割った余りが0かどうかを判定することで、偶数か奇数かを区別します。以下に具体的なサンプルコードを示します。サンプルコードmy_list = [369, 793, 2848, 4314, 57467] print(The list is :) print(my_list) sum_odd = 0 sum_even = 0 for index in my_list: for element in str(index):