配列をパーセンテージでセグメントに分割したい。たとえば、100個の要素を[1/3,1/4,5/12]
のセグメントに分割します(ただし、[1/3,1/4,5/12]*100=[33.3,25,41.7]
)。[33,25,42]
([34,24,42]
や[33,26,41]
のようなものも受け入れられます.1以内での放浪は重要ではありません)。アレイを細分する方法は?
現在、私は再帰的に
function x = segment(n,pct)
x = n * pct;
y = fix(x);
r = x - y;
for ii = 1 : length(r)-1
[r(ii),r(ii+1)] = deal(fix(r(ii)),r(ii+1)+r(ii)-fix(r(ii)));
end
x = y + r;
segment(100,[1/3,1/4,5/12])
が[33,25,42]
を与え、これを行うためにループを使用します。
再帰的ループなしで良い方法がありますか?
は 'ラウンド(N * PCT)です'何を探しているの..? – Adiel
@Adielいいえ、 'sum(round(n * pct))'は 'n 'であることが保証されていません – Lee
ああ、私は得ます。だから、私はこの数値を計算するだけです。もし100-nを得るなら、nに近い要素をインクリメントします。 '100 + n 'のデクリメントと同じです...それは合うでしょうか? – Adiel