// books:书的列表
// numPeople:要分配给的人数
// numTimes:要分配的次数
function distributeBooks(books, numPeople, numTimes) {
// 如果人数或次数小于等于0,或者书的数量不足以分配给所有人,返回无效输入
if (numPeople <= 0 || numTimes <= 0 || books.length < numPeople * numTimes) {
return "Invalid input!";
}
// 复制一份书列表,以便不破坏原始数据
const bookList = [...books];
const bookCount = bookList.length;
// 计算每个人应该分配到的书的数量
const avgBooks = Math.floor(bookCount / numPeople);
let extraBooks = bookCount % numPeople;
// 定义结果数组
const result = [];
// 定义起始和结束索引,以便将书分配给每个人
let startIndex = 0;
let endIndex = 0;
// 对于每个人,分配平均数量的书
for (let i = 0; i < numPeople; i++) {
// 初始化空数组,以便将书分配给当前人
result[i] = [];
// 结束索引是起始索引加上平均分配量
endIndex += avgBooks;
// 如果有剩余的书,将它们分配给前面的人
if (extraBooks > 0) {
endIndex++;
extraBooks--;
}
// 将书分配给当前人
for (let j = startIndex; j < endIndex; j++) {
// 随机选择一本书
const bookIndex = Math.floor(Math.random() * bookList.length);
// 将选中的书添加到结果数组中
result[i].push(bookList[bookIndex]);
// 从书列表中删除选中的书
bookList.splice(bookIndex, 1);
}
// 更新起始索引,以便将书分配给下一个人
startIndex = endIndex;
}
// 返回结果数组
return result;
}
var books = ['a', 'b', 'c', 'd', 'e', 'f', 'iii', 'jjj', 'kkk', 'lll'];
var numPeople = 8;
var numTimes = 1;
var result = distributeBooks(books, numPeople, numTimes);
console.log(result);
console