擅长:python、mysql、java
<p>数学公式很简单:</p>
<pre><code>value / segments
</code></pre>
<p>提供至少要放入每个段的项目数</p>
<pre><code>value % segments
</code></pre>
<p>提供接收额外项目的段数</p>
<p>举你的例子:</p>
<pre><code> v/s v%s
a 4 4 1 0
b 3 4 0 3
c 3 2 1 1
</code></pre>
<p>这样,你就得到了一个非常简单的算法:</p>
<pre><code>unsigned int n = value/segments;
unsigned int c = value%segments;
for(unsigned int i = 0; i < segments; ++i)
theSegments[i] = n + (i < c);
</code></pre>
<p>或者,如果要跳过数组:</p>
<pre><code>unsigned int f(unsigned int values, unsigned int segments, theSegment)
{
// assuming theSegment being checked for < segments
return value/segments + (theSegment < value%segments)
}
</code></pre>
<p>如果要使用基于1的数组(将索引0作为伪索引):</p>
<pre><code>for(unsigned int i = 1; i <= segments; ++i)
theSegments[i] = n + (i <= c);
</code></pre>