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

JavaScriptで整数を指定した個数の均等な部分に分割する方法を解説

JavaScriptである整数を、指定した個数のできるだけ均等な値に分割したい場合があります。このようなときは、剰余演算子(%)除算を組み合わせることで簡単に実現できます。

基本的な考え方

まず「元の値 ÷ 分割数」の剰余(余り)を計算します。余りが0の場合は、すべての部分に同じ値を入れればOKです。余りがある場合は、商を全要素に入れたうえで、先頭から余りの個数分だけ各要素に1を加算します。こうすることで、合計が元の値と一致し、かつ各部分の差が最大1になる均等な分割が可能になります。

コード例

var divideInteger = function(value, divide) {
    var num;
    var modular = value % divide;
    if(modular == 0){
        num = value / divide;
        sumOfDivideParts = Array(divide).fill(num);
    } else {
        num = (value - modular) / divide;
        sumOfDivideParts = Array(divide).fill(num);
        for(i = 0; i < modular; i++){
            sumOfDivideParts[i] = sumOfDivideParts[i] + 1;
        }
        sumOfDivideParts.reverse()
    }
    return sumOfDivideParts;
}
var arrayValues = divideInteger(50, 8)
console.log(arrayValues);

このコードでは、50を8つの部分に分割しています。50 ÷ 8 の商は6、余りは2なので、6が6個と7が2個の配列が生成されます。

プログラムの実行方法

上記のプログラムを実行するには、Node.jsを使って次のコマンドを入力します。

node fileName.js

ここでは、ファイル名を demo169.js として保存しています。

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

PS C:\Users\Amit\javascript-code> node demo169.js
[
    6, 6, 6, 6,
    6, 6, 7, 7
]

処理のポイント

  • 剰余の計算: value % divide で割り切れない場合の余りを求めます。
  • 余りがない場合: Array(divide).fill(num) を使い、商で満たされた配列を一括生成します。
  • 余りがある場合: 商をベースに、先頭から余りの個数分だけ1を加算し、最後に reverse() で昇順に整列させています。

この手法を使えば、金額の按分やタスクの割り当てなど、「なるべく均等に分割したい」というさまざまな場面で応用できます。

  1. JavaScriptで数値を連続する奇数・偶数ごとに分割して配列として返す方法

    問題 正の整数 n(n > 0)を引数として受け取り、その桁を「連続する奇数の並び」と「連続する偶数の並び」に分割した配列を返す JavaScript 関数を作成します。具体的には、数字を左から右へ読み進めながら、奇数から偶数へ(または偶数から奇数へ)切り替わる箇所で数値を区切ります。 たとえば入力が 124579 の場合、「1」は奇数、「24」は偶数、「579」は奇数であるため、出力は [1, 24, 579] となります。 解説 この問題は、次の手順で解くことができます。 数値を文字列化する: String(num) で数値を文字列に変換すれば、各桁にインデックスでアクセスできるよ

  2. 【C++】数値を指定された数で割り切れる2つの部分に分割するプログラム

    はじめにこのチュートリアルでは、与えられた数値を2つの部分に分割し、それぞれが指定された数で割り切れるようにできるかを判定するC++プログラムを作成します。入力として、文字列形式で与えられる1つの数値と、2つの整数を受け取ります。プログラムは、この数値を「前半部分が1つ目の整数で割り切れ、後半部分が2つ目の整数で割り切れる」ように分割できるかどうかを調べ、可能であればその分割結果を出力します。問題を解くための手順対象となる数値と、除算判定に使用する2つの整数を初期化します。数値の先頭から順に桁を追加し、前半部分が1つ目の数で割り切れるまで処理を繰り返します。各文字を数字に変換しながら数値を構築