要处理两种特殊形式,因为这两种在我们尝试往斜对角线填充 1 时,会存在数组越界,所以要特殊处理
// 一种是 n > m 的 0 0 0 0 0 0 0 0 // 另一种是 n < m 的 0 0 0 0 0 0 0 0
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
const [n, m, k] =(await readline()).split(' ').map(Number)
const maxBallCount = Math.max(n, m)
if (k < maxBallCount) {
console.log(-1)
return
}
// 构建一个二维数组并填充 0
const binaryArr = new Array(n).fill().map(() => new Array(m).fill(0))
// 计算最小所需的小球数量
const remainBallCount = k - maxBallCount
for (let i = 0; i < maxBallCount; i++) {
if (n < m && i + 1 > n) { // 形式1处理
binaryArr[n - 1][i] = 1
} else if (n > m && i + 1 > m) { // 形式2处理
binaryArr[i][m - 1] = 1
} else { // 如果 n === m
binaryArr[i][i] = 1
}
}
binaryArr[0][0] = binaryArr[0][0] + remainBallCount
for (let i = 0; i < n; i++) {
console.log(binaryArr[i].join(' '))
}
}()

京公网安备 11010502036488号