Mô tả bài toán
Viết chương trình C in ra màn hình hình kim cương (diamond) bằng các dấu sao (*), sử dụng lồng vòng lặp for.
Logic vẽ hình kim cương
Hình kim cương gồm 2 phần: nửa trên (đỉnh nhọn xuống giữa) và nửa dưới (từ giữa xuống đỉnh nhọn).
1. Nửa trên của kim cương
for (j = 1; j <= rows; j++) {
// In khoảng trắng bên trái
for (i = 1; i <= rows - j; i++)
printf(" ");
// In dấu sao
for (i = 1; i <= 2*j - 1; i++)
printf("*");
printf("\n");
}
2. Nửa dưới của kim cương
for (j = 1; j <= rows - 1; j++) {
// In khoảng trắng bên trái (tăng dần)
for (i = 1; i <= j; i++)
printf(" ");
// In dấu sao (giảm dần)
for (i = 1; i <= 2*(rows - j) - 1; i++)
printf("*");
printf("\n");
}
Chương trình hoàn chỉnh
#include <stdio.h>
int main() {
int rows, i, j;
printf("Nhap so hang: ");
scanf("%d", &rows);
// Nửa trên
for (j = 1; j <= rows; j++) {
for (i = 1; i <= rows - j; i++)
printf(" ");
for (i = 1; i <= 2*j - 1; i++)
printf("*");
printf("\n");
}
// Nửa dưới
for (j = 1; j <= rows - 1; j++) {
for (i = 1; i <= j; i++)
printf(" ");
for (i = 1; i <= 2*(rows - j) - 1; i++)
printf("*");
printf("\n");
}
return 0;
}
Kết quả (rows = 5)
Nhap so hang: 5
*
***
*****
*******
*********
*******
*****
***
*
Giải thích công thức
- Khoảng trắng nửa trên:
rows - j(giảm dần từ rows-1 về 0) - Số sao nửa trên:
2*j - 1(1, 3, 5, 7, 9... - dãy số lẻ) - Khoảng trắng nửa dưới:
j(tăng dần từ 1 đến rows-1) - Số sao nửa dưới:
2*(rows-j) - 1(giảm dần: 7, 5, 3, 1)
Chương trình này minh họa tư duy chia bài toán thành các phần nhỏ và sử dụng lồng vòng lặp để kiểm soát vị trí in ký tự.