题目说明
输出形式如下
做法1-直接模拟
显然对角线都是1,然后从每个对角线位向右向下递增
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
double f[120][120] = {0}; // 二维数组用于存储结果
int main() {
int n;
while (cin >> n, n) { // 循环读取n的值,当n为0时退出循环
for (int i = 0; i < n; ++i) {
f[i][i] = 1; // 对角线上的元素设置为1
for (int j = i + 1, k = 2; j < n; ++j, ++k) {
f[i][j] = k; // 设置矩阵上半部分的元素为k
f[j][i] = k; // 设置矩阵下半部分的对应元素为k,因为矩阵是对称的
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << f[i][j] << " "; // 输出矩阵元素
}
cout << endl;
}
cout << endl; // 输出一个空行,用于分隔不同n的输出
}
return 0;
}
做法2 曼哈顿距离
我们的老朋友又是它!观察可得矩阵内每个数满足(横坐标-纵坐标)的绝对值+1
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
double f[120][120] = {0}; // 二维数组用于存储结果
int main() {
int n;
while (cin >> n, n) { // 循环读取n的值,当n为0时退出循环
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
f[i][j] = abs(i - j) + 1; // 计算每个矩阵元素的值
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << f[i][j] << " "; // 输出矩阵元素
}
cout << endl;
}
cout << endl; // 输出一个空行,用于分隔不同n的输出
}
return 0;
}