javascript - 麻烦大神看一下这段代码有什么错误,请求指点
PHPz
PHPz 2017-04-11 13:11:51
[JavaScript讨论组]

求指点!!!!!

/*
 * 有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");

PHPz
PHPz

学习是最好的投资!

全部回复(3)
PHPz

算法我不想去研究了, @ted423 已经告诉了你问题所在,数组一共9个元素,你的 i 都已经是 9 了,取得到的肯定是 undefined

使用调试方法,或者通过 console.log 把相关的一些值输出来看看就能发现错误在哪里,再回去分析推敲一下原因,应该是能解决问题的。

PHP中文网

思考了下,抽象出来就是把1~n个数字填充到一个n*n的格子中,并且每行每列数字之和都相同但不重复填充,然后去掉第一行就是你要的结果。

//得到二维数组
function sum(n){
    if(n<2){
        throw new Error('最少两个人');
    }
    let arr = [];
    for(var i = 0;i<n;i++){
        arr[i] = [];
        var temp = i;
        for(var j = 0;j<n;j++){
            ++temp;
            if(temp<n){
                arr[i][j] = temp+1;
            }else{

                arr[i][j] = temp-n+1;
            }
        }
    }
    return arr;
}
let result = sum(n).shift(0);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号