โจทย์
พิมพ์รูปสี่เหลี่ยมซ้อนกัน (Concentric) ในเมทริกซ์ 2D ขนาด (2n-1) x (2n-1) ค่าลดลงจากขอบเข้าสู่ศูนย์กลาง
ตัวอย่าง n=4:
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
วิธีแก้ปัญหา
เมทริกซ์มีขนาด (2n-1) แบ่งเป็น 2 ส่วน:
- บน: แถว 0 ถึง n-1
- ล่าง: แถว n ถึง 2n-2 (กระจายจากบน)
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void print2Dsequence(int n) {
int s = 2 * n - 1;
// ส่วนบน
for (int i = 0; i < (s / 2) + 1; i++) {
int m = n;
for (int j = 0; j < i; j++) { cout << m << " "; m--; }
for (int k = 0; k < s - 2 * i; k++) cout << n - i << " ";
m = n - i + 1;
for (int l = 0; l < i; l++) { cout << m << " "; m++; }
cout << endl;
}
// ส่วนล่าง (กระจาย)
for (int i = s / 2 - 1; i >= 0; i--) {
int m = n;
for (int j = 0; j < i; j++) { cout << m << " "; m--; }
for (int k = 0; k < s - 2 * i; k++) cout << n - i << " ";
m = n - i + 1;
for (int l = 0; l < i; l++) { cout << m << " "; m++; }
cout << endl;
}
}
int main() {
int n = 4;
cout << "The sequence of concurrent rectangle of 4 is: \n";
print2Dsequence(n);
return 0;
}
ผลลัพธ์
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