鍍金池/ 問答/HTML/ 數(shù)組隨機分配為一個二維數(shù)組的問題

數(shù)組隨機分配為一個二維數(shù)組的問題

給定一個數(shù)組 [1,2,3,4,5,6,7,8,9] 和一個數(shù)字 m=4
滿足數(shù)字隨機分配且分為m組,保證每組數(shù)字個數(shù)盡量相同
輸出:
[[2,5],[1,8,9],[7,3],[6,4]]

回答
編輯回答
爛人

這個問題for循環(huán)嵌套就可以完成 外循壞寫 for(var i = 0 ; i < 4 ; i ++)表示只循環(huán)四次 內(nèi)循環(huán)具體把你的數(shù)字push進去 然后外循環(huán)創(chuàng)建個新數(shù)組 內(nèi)循環(huán)每結(jié)束一次 外循壞push一次

2018年5月14日 01:58
編輯回答
尛憇藌

額,清一色javascript,我來一個java版的吧

/**
 * 分割數(shù)組
 * @param arr 原數(shù)組
 * @param m 分割個數(shù)
 * @return 結(jié)果
 */
private static int[][] Test(int[] arr, int m) {
    //參數(shù)判斷
    if (arr==null || m > arr.length)
        return null;
    else {
        int[][] result = new int[m][];
        int everyArrCount = arr.length / m; //計算出,每一個分組的大小
        for (int i = 0; i < m; i++) {
            int count = 0;
            //要對分割的最后一個數(shù)組進行特殊處理,因為有可能不是均分
            if (i!=m-1) {
                count = everyArrCount;
            }
            else {
                count = arr.length-everyArrCount*i;
            }
            result[i] = new int[count];
            for (int j = 0; j < count; j++) {
                result[i][j] = arr[i*everyArrCount+j];
            }
        }
        return result;
    }
}
2017年8月30日 13:18
編輯回答
莓森
function trans (arr, length) {
  if (length === 0) return null
  let order = [...Array(length).keys()]
  let result = order.map(i => [])
  let cur = 0

  while (arr.length) {
    let i = Math.floor(Math.random() * arr.length) // 隨機取元素的下標
    result[cur++].push(arr.splice(i, 1)[0])
    cur %= length
  }

  // 上述遍歷結(jié)束之后永遠是前面的元素含有的數(shù)字的個數(shù)不小于后面元素含有的數(shù)字的個數(shù)
  // 所以下述操作打亂一下分好組的元素的順序
  let order1 = []
  while (order.length) {
    let i = Math.floor(Math.random() * order.length)
    order1.push(order.splice(i, 1)[0])
  }
  return order1.map(i => result[i])
}

trans( [1, 2, 3, 4, 5, 6, 7, 8, 9], 4)
2018年4月19日 14:05
編輯回答
風清揚
var arr = [1,2,3,4,5,6,7,8,9] 

function a(arr,count){
    arr = arr || []
    count = count || 1
    if(!Array.isArray(arr) || isNaN(count)){
        alert('數(shù)據(jù)錯誤')
        return false
    }
    arr.sort((a,b)=>Math.random() - 0.5)
    var newarr = []
    while(count){
        var l = (arr.length/count).toFixed(0)
        newarr.push(arr.splice(0,l))
        count --
    }
    return newarr
}
a(arr,4)

這里有點瑕疵,就是9個元素,輸出4個的話,子元素個數(shù)固定為2、2、3、2,這與(arr.length/count).toFixed(0)的算法有關(guān),具體怎么優(yōu)化,你可以自己動腦想一下

2017年9月15日 11:55