要处理两种特殊形式,因为这两种在我们尝试往斜对角线填充 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(' ')) } }()