Giới thiệu
Cho số nguyên n, in ra hình kim cương với n lớp khác nhau.
Ví dụ
Input: n = 3
Output: (xem hình ảnh minh họa)
Phương pháp
- Tổng số hàng:
(2 * n) + 1 - Khoảng trắng từ hàng 0 đến n:
2 * (n - i) - Khoảng trắng từ hàng n+1 đến cuối:
2 * (i - n)
Thuật toán
Hàm print_pattern(n):
In dòng đầu: 2*n khoảng trắng + "0"
Với i từ 1 đến 2*n-1:
In khoảng trắng đầu dòng
Nếu i < n: in số tăng dần 0..i%n rồi giảm dần
Nếu i > n: in số tăng dần 0..n-(i-n) rồi giảm dần
Nếu i == n: in 0..n rồi giảm dần
In "0" và xuống dòng
In dòng cuối: 2*n khoảng trắng + "0"
Hàm main:
n = 3
Gọi print_pattern(n)
Code C
#include <stdio.h>
void print_pattern(int n) {
int i, j;
// Dòng đầu
for (i = 1; i <= n * 2; i++) printf(" ");
printf("0\n");
// Phần giữa
for (i = 1; i <= (n * 2) - 1; i++) {
// Khoảng trắng
if (i < n) {
for (j = 1; j <= (n - i) * 2; j++) printf(" ");
} else {
for (j = 1; j <= (i % n) * 2; j++) printf(" ");
}
// In số
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");
}
// Dòng cuối
for (i = 1; i <= n * 2; i++) printf(" ");
printf("0");
}
int main() {
int n = 3;
print_pattern(n);
return 0;
}
Kết quả
Hình kim cương đối xứng với các lớp số tăng giảm.