สร้างรูปเพชรที่มีชั้นตามจำนวน n ที่กำหนด รูปจะมีความสูง (2n+1) แถว ประกอบด้วยตัวเลขและช่องว่าง
ตัวอย่าง n=3
0
0 1 0
0 1 2 1 0
0 1 2 3 2 1 0
0 1 2 1 0
0 1 0
0
หลักการ
- แถวบนสุดและล่างสุด: พิมพ์ช่องว่าง 2n ช่อง แล้วตามด้วย 0
- ส่วนกลาง: คำนวณช่องว่างและตัวเลขตามตำแหน่งแถว (i) เทียบกับ n
โค้ดตัวอย่าง
#include <stdio.h>
void print_pattern(int n) {
int i, j;
// บรรทัดแรก
for (i = 1; i <= n * 2; i++) printf(" ");
printf("0\n");
// ส่วนกลาง
for (i = 1; i <= (n * 2) - 1; i++) {
// ช่องว่างหน้าตัวเลข
if (i < n) {
for (j = 1; j <= (n - i) * 2; j++) printf(" ");
} else {
for (j = 1; j <= (i % n) * 2; j++) printf(" ");
}
// ตัวเลข
if (i < n) {
for (j = 0; j <= i % n; j++) printf("%d ", j);
for (j = (i % n) - 1; j > 0; j--) printf("%d ", j);
printf("0");
} else if (i > n) {
for (j = 0; j <= n - (i - n); j++) printf("%d ", j);
for (j = (n - (i - n)) - 1; j > 0; j--) printf("%d ", j);
printf("0");
} else {
for (j = 0; j <= n; j++) printf("%d ", j);
for (j = n - 1; j > 0; j--) printf("%d ", j);
printf("0");
}
printf("\n");
}
// บรรทัดสุดท้าย
for (i = 1; i <= n * 2; i++) printf(" ");
printf("0");
}
int main() {
int n = 3;
print_pattern(n);
return 0;
}