In ma trận (2n-1)×(2n-1) dạng đồng tâm. Ví dụ n=4: viền ngoài toàn 4, bên trong toàn 3, tiếp 2, tâm là 1.
Xây dựng từng hàng
Ma trận đối xứng. In nửa trên (0 đến n-1): giảm từ n đến n-i, lặp n-i, tăng lại. Nửa dưới đối xứng ngược lại.
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
void printConcentric(int n) {
int size = 2*n - 1;
// Nua tren
for (int i = 0; i < n; i++) {
int val = n;
for (int j = 0; j < i; j++) cout << val-- << ' ';
for (int j = 0; j < size - 2*i; j++) cout << n-i << ' ';
val = n-i+1;
for (int j = 0; j < i; j++) cout << val++ << ' ';
cout << '\n';
}
// Nua duoi
for (int i = n-2; i >= 0; i--) {
int val = n;
for (int j = 0; j < i; j++) cout << val-- << ' ';
for (int j = 0; j < size - 2*i; j++) cout << n-i << ' ';
val = n-i+1;
for (int j = 0; j < i; j++) cout << val++ << ' ';
cout << '\n';
}
}
int main() {
printConcentric(4);
return 0;
}
Kết quả
4 4 4 4 4 4 4 4 3 3 3 3 3 4 4 3 2 2 2 3 4 4 3 2 1 2 3 4 4 3 2 2 2 3 4 4 3 3 3 3 3 4 4 4 4 4 4 4 4