一个数平均分成一个数组

小丑的帽子
  • 101

如题,把一个数变成一个平均的数组
如数字8,均分成4个时变成[2,2,2,2],无法均分时,数组第一项的值可以比第二项大,以此类推,如均分成3个时变成[3,3,2],均分成5个时[2,2,2,1,1]

回复
阅读 2.7k
5 个回答
✓ 已被采纳
     function arrFunc(num, count) {
        let arr = [];
        const data = parseInt(num/count)
        for(let i = 0; i < count; i++){
          const cz = num - data*count;
          if(cz !== 0 && i <= (cz-1)){
            arr.push(data+1)
          }else{
            arr.push(data)
          }

        }
        return arr;
     }

     const a = arrFunc(8,5)
     console.log(a);

这个就有点伸手党了吧,基本思路用这个数字对均分个数取模运算和取余运算,数组各项为取模的值,再对前(取余值)项,每个值加一不就行了吗

java代码如下,转换成js应该很容易

   public  int [] splitNum(int num, int len) {
        if (len < 1) {
            return null;
        }
        int [] res = new int[len];
        int divisor = num/len;
        int remainder = num%len;
        Arrays.fill(res, divisor);
        for(int i = 0; i < remainder; i++) res[i]++;
        return res;
    }
function sort(n,s){
  var el = n%s,
      sl = s-el,
      e = parseInt(n/s);
  return el?range((n-sl*e)/el,el).concat(range(e,sl)):
        range(e,sl);
}
sort(8,3);

function range(n,l){
  for(var i=0,newArr=[];i<l;i++)
    newArr.push(n);
  return newArr;
}
const split = (m, n) => [...Array(m%n).fill(m/n+1|0), ...Array(n-m%n).fill(m/n|0)]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏