求指点!!!!!
/*
* 有n=2^k个远动员选手,设计比赛日程表实现:
*(1)每个选手必须与n-1个选手比赛
*(2)每个选手一天只比赛一场
*(3)比赛共进行n-1天
* 输入:n人
* 输出:n行n-1列,第i行第j列表示第i个选手第j天遇到的对手,不包含第一列表示为选手编号
*/
/*
将n*n个格子,也就是n阶方阵从中间十字划分,一次划分分成四块,令其右上角和左下角的数据完全相同,右下角和左上角的数据完全相同;每次划分都得到了若干个n/2阶的方阵,然后对这些方阵进行操作,继续令其右上角和左下角的数据完全相同,右下角和左上角的数据完全相同,如此循环下去,直至n<2时结束递归。
*/
console.time("Summary");
function twoDimetionalArr(m) {
m = m + 1;
var tArray = []; //先声明一维
for (let f = 0; f < m; f++) { //一维长度为i,i为变量,可以根据实际情况改变
tArray[f] = []; //声明二维,每一个一维数组里面的一个元素都是一个数组;
for (let g = 0; g < m; g++) { //一维数组里面每个元素数组可以包含的数量p,p也是一个变量;
tArray[f][g] = 0; //这里将变量初始化,我这边统一初始化为空,后面在用所需的值覆盖里面的值
}
}
return tArray;
}
function gameTable(k) {
var gameArr = twoDimetionalArr(k);
var n = 2;
var temp = 0;
var i = 0;
var j = 0;
gameArr[1][1] = 1;
gameArr[1][2] = 2;
gameArr[2][1] = 2;
gameArr[2][2] = 1;
console.log(gameArr);
for (var t = 1; t < k; t++) {
temp = n;
n = n * 2;
for (i = temp + 1; i <= n; i++) {
for (j = 1; j <= temp; j++) {
gameArr[i][j] = gameArr[i - temp][j] + temp; //左下角和左上角元素的对应关系
}
}
for (i = 1; i <= temp; i++) { //将左下角元素抄到右上角
for (j = temp + 1; j <= n; j++) {
gameArr[i][j] = gameArr[i + temp][(j + temp) % n];
}
}
for (i = temp + 1; i <= n; i++) { //将左上角元素抄到右下角
for (j = temp + 1; j <= n; j++) {
gameArr[i][j] = gameArr[i - temp][j - temp];
}
}
}
return gameArr;
}
var arrangeArr = gameTable(8);
console.log(arrangeArr);
console.timeEnd("Summary");