在X × X网格中构造以下模式(多维数组)X应为奇数
ooxoo
oxxxo
xxxxx
oxxxo
ooxoo
示例:
输入X = 5应返回
[["o","o","x","o","o"],
["o","x","x","x","o"],
["x","x","x","x","x"],
["o","x","x","x","o"],
["o","o","x","o","o"]]
返回类型应为对象。
到目前为止,我已经写了这段代码,但它没有正确地提供我正在寻找的结果。
function drawPattern(X) {
// Create an empty grid
var grid = [];
// Calculate the middle of the grid
var middle = Math.floor(X / 2);
// Loop through each row of the grid
for (var i = 0; i < X; i++) {
// Create an empty row
var row = [];
// Loop through each column of the row
for (var j = 0; j < X; j++) {
// Check if the current position is on the edge of the grid
if (i == 0 || i == X - 1 || j == 0 || j == X - 1) {
// If the current position is on the edge, add an "o" to the row
row.push("o");
} else {
// If the current position is not on the edge, check if it is in the middle of the grid
if (i == middle && j == middle) {
// If the current position is in the middle, add an "x" to the row
row.push("x");
} else {
// If the current position is not in the middle, add an "o" to the row
row.push("o");
}
}
}
// Add the row to the grid
grid.push(row);
}
// Return the grid
return grid;
}
console.log(drawPattern(5).join("\n"))
4条答案
按热度按时间au9on6nz1#
这里的想法是计算从中间的距离(距离不允许对角线),如果足够近,则填上x,如果不够近,则填上o。
换句话说,“x”的外边缘应该总是从正方形中心移动相同的次数(不包括对角线),所以如果你所在的点在那个距离或更近,它应该是x,否则是o。
对于循环版本:
参考文献:
bxfogqkk2#
如果你一次做一行,并使两边波动:
使用扩展和阵列。从并镜像操作系统
zzlelutf3#
我已经把代码分解成可管理的部分。解决这类问题的关键是将其分解为子问题。
oxf4rvwz4#
我想出了这个代码(一个非常简化的版本玩)
希望这个演示能教育你解决未来的问题!主要准则:
快乐编码