前言
前段时间,公司要求做一个羽毛球比赛的小功能,那就是每个人都搭档一次,进行双打。而且每人上场的次数一样。比赛场数=A*(A-1)/4,A为选手人数,如8人,每人打七场,共打14场。如果碰到选手人数对于这个公式不整除的情况。每人打的场数累加,直到整除为止。
提示:以下是本篇文章正文内容,下面案例可供参考
一、分析规律是什么?
- 每个人大的场数都一样。
- 自己不可能跟自己搭档。
- 自己也不可能出现在对面。
二、先找出所有可能出现的搭档池
看以下代码
/**
*
* @param {array} peopleList 选手列表
* @param {number} round_num 每人打的场数,默认选手人数-1
*/
function getTempMatchList(peopleList,round_num) {
let p_num = peopleList.length;
let partner_group_list = []; //所有有可能搭档的组
let partner_group_list_real = []; //出场的搭档数组
let p_should_round_num = {
}; //记录每人上场的次数对象
let ground_num = 0;
for (let i = 0; i < peopleList.length; i++) {
p_should_round_num[peopleList[i]] = peopleList.length-1; //预先定下前面的搭档池数
}
if((p_num*round_num)%4==0){
//整除
ground_num = Math.floor(peopleList.length*round_num/2);
for (let i = 0; i < peopleList.length; i++) {
const e = peopleList[i];
for (