js輸出蛇形矩陣
阿新 • • 發佈:2019-02-15
來自choice boh
/**
* 蛇形矩陣
* 思路整理:首先定義一個二維陣列用來儲存矩陣內容,蛇形矩陣的特點是數字順時針迴旋依次增加1,
* 可以通過二維陣列座標控制輸出內容。
* 傳入值必須為正整數!!!
* 迴圈定義:以3X3陣列為例,一次迴圈為[0][0]==>[0][2]==>[2][2]=>[2][0]=>[1][0]
* 第二次迴圈:[1][1]
* 從最外層向內層迴圈迴圈,到中心位置時停止迴圈
* 迴圈次數:奇數1/2*n+1 偶數1/2*n
*/
function snake(num) {
var result = new Array();
var flag = 0, //當前迴圈次數,從0起
item = 1, // 輸出項
i = 0, // 橫座標
j = 0, // 縱座標
times; // 迴圈次數
for (let a = 0; a < num; a++) {
result[a] = new Array();
for (let b = 0; b < num; b++) {
result[a][b] = 0;
}
}
// 順時針輸出函式
function loop() {
// 迴圈左上角起始位置
if (i === j) {
result[i][j] = item; // 輸入內容為奇數時,直接輸出
for (j; j < num - flag - 1; j++) {
result[i][j] = item;
item++;
}
}
// 迴圈右上角
if (i < j) {
for (i; i < num - flag - 1; i++) {
result[i][j] = item;
item++;
}
}
// 判斷是否為當次迴圈的左上角起始位置,此處為迴圈右下角
if (i === j && i > flag && j > flag) {
for (j; j > flag; j--) {
result[i][j] = item;
item++;
}
}
// 迴圈左下角,方法執行完成標誌一次順時針走完,橫縱座標加1,等待進入下次迴圈
if (i > j) {
for (i; i > flag; i--) {
result[i][j] = item;
item++;
}
i += 1;
j += 1;
}
}
// 迴圈次數為輸入的值(偶數)的1/2*n,奇數為1/2*n+1
if (num % 2 === 0) {
times = num / 2;
} else {
times = num / 2 + 1;
}
for (flag; flag < times; flag++) {
loop();
}
//矩陣輸出
// result.forEach((items, index) => console.log(`${items.join(' ')}`));
// 橫向輸出
console.log(result.map(item => item.join(' ')).join(' '));
}
//執行方法,輸出蛇形矩陣,傳入值必須為正整數!!!
snake(3);