(暴力, 预处理) $O(n^2)$
观察到输出矩阵是对称阵, 所以只需考虑上三角或者下三角(主对角线为1)
并且对于i from 1 to n, j from i to n, 每行的变化是1 to n - i + 1,
不难得出init函数里的matrix[i][j] = matrix[j][i] = j - i + 1
#include<iostream>
using namespace std;
const int N = 110;
int matrix[N][N];
void init() {
for(int i = 1; i < N; ++i) {
for(int j = i; j < N; ++j) {
matrix[i][j] = matrix[j][i] = j - i + 1;
}
}
}
int main() {
init();
int n;
while(1) {
cin >> n;
if(n == 0) break;
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= n; ++j) cout << matrix[i][j] << ' ';
cout << endl;
}
cout << endl;
}
}