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()で昇順に整列させています。
この手法を使えば、金額の按分やタスクの割り当てなど、「なるべく均等に分割したい」というさまざまな場面で応用できます。
-
JavaScriptで数値を連続する奇数・偶数ごとに分割して配列として返す方法
問題 正の整数 n(n > 0)を引数として受け取り、その桁を「連続する奇数の並び」と「連続する偶数の並び」に分割した配列を返す JavaScript 関数を作成します。具体的には、数字を左から右へ読み進めながら、奇数から偶数へ(または偶数から奇数へ)切り替わる箇所で数値を区切ります。 たとえば入力が 124579 の場合、「1」は奇数、「24」は偶数、「579」は奇数であるため、出力は [1, 24, 579] となります。 解説 この問題は、次の手順で解くことができます。 数値を文字列化する: String(num) で数値を文字列に変換すれば、各桁にインデックスでアクセスできるよ
-
【C++】数値を指定された数で割り切れる2つの部分に分割するプログラム
はじめにこのチュートリアルでは、与えられた数値を2つの部分に分割し、それぞれが指定された数で割り切れるようにできるかを判定するC++プログラムを作成します。入力として、文字列形式で与えられる1つの数値と、2つの整数を受け取ります。プログラムは、この数値を「前半部分が1つ目の整数で割り切れ、後半部分が2つ目の整数で割り切れる」ように分割できるかどうかを調べ、可能であればその分割結果を出力します。問題を解くための手順対象となる数値と、除算判定に使用する2つの整数を初期化します。数値の先頭から順に桁を追加し、前半部分が1つ目の数で割り切れるまで処理を繰り返します。各文字を数字に変換しながら数値を構築