Ý tưởng cho bài này là nạp các số từ các cạnh ngoài nhất của ma trận vào trong lần lượt theo trường hợp:
- TH1: Nạp từ trái qua phải
- TH2: Nạp từ trên xuống dưới
- TH3: Nạp từ phải qua trái
- TH4: Nạp từ dưới lên trên
Ta khởi tạo các giá trị
- Cột trái: c1=0
- Cột phải: c2=n-1
- Hàng trên: h1=0
- Hàng dưới: h2=n-1
- Biến đếm: =1
TH1: a[i][j] với i=h1; c <= j <= c2; j++
TH2: a[i][j] với j=c2; h1 <= i <= h2; i++
TH3: a[i][j] với i=h2; c2 >= j >= c1; j--
TH4: a[i][j] với j=c1; c2 >= i >= c1; i--
int n; cin >> n;
int a[n][n];
int count = 1;
int h1 = 0; h2 = n-1; c1 = 0; c2 = n-1;
while(h1 <= h2 && c1 <= c2) {
// TH1
for(int i = c1; i <= c2; i++) {
a[h1][i] = count;
count++;
}
h1++;
// TH2
for(int = h1; i <= h2; i++) {
a[i][c2] = count;
count++;
}
c2--;
// TH3
if(c1 <= c2) {
for(int i = c2; i >= c1; i--) {
a[h2][i] = count;
count++;
}
h2--;
}
// TH4
if(h1 <= h2) {
for(int i = h2; i >= h1; i--) {
a[i][c1] = count;
count++;
}
c1++;
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
}