JavaScript タグがあるので、JavaScript で回答します。
元のコードの問題点
質問文のコードには、29 の三等分を試みた場合に三等分にならない問題があります。
[9, 9, 11]
の配分となりますが、[9, 10, 10]
もしくは [10, 10, 9]
になるべき状況です。
JavaScript
1'use strict';
2var MAX_LIMIT = 3;
3var taget_ymd = "20120229";
4var taget_day = taget_ymd.substring(6, 8);
5var date_term = Math.floor(taget_day / MAX_LIMIT);
6var to_date="";
7
8for (var i = 0; i <= MAX_LIMIT - 1; i++){
9 if (i === MAX_LIMIT - 1){
10 to_date = taget_day;
11 } else {
12 to_date = i * date_term + date_term;
13 }
14 //1回ごとの処理処理
15 console.log(to_date); // 9 -> 18 -> 29
16}
修正版コード
余剰分の数値は質問文のコードに合わせて、後方に持ってくるようにしました。
すなわち、29 を与えた場合は [9, 10, 10]
の配分となります。
JavaScript
1'use strict';
2function toDividedInteger (number, divisor) {
3 var floor = Math.floor,
4 integers = [],
5 divided, remainder;
6
7 number = floor(number);
8 divisor = floor(divisor);
9 remainder = number % divisor;
10 divided = (number - remainder) / divisor;
11
12 for (var i = 0, j = divisor - remainder - 1, temp = 0; i < divisor; ++i) {
13 temp += divided + Number(j < i);
14 integers.push(temp);
15 }
16
17 return integers;
18}
19
20var integers = toDividedInteger('20120229'.slice(-2), 3);
21console.log(JSON.stringify(integers)); // [9, 19, 29]
Re: eugenio さん