Sorry các bác trước (em vừa mới gia nhập diễn đàn, tính lại lười code nên đây là bài đầu tiên em code) - (Vừa đi uống beer về nên có thể code không thật chuẩn về cú pháp, em đảm bảo tư tưởng chủ đạo vẫn đúng)
Nếu chỉ dùng printf và for thì ta sẽ phải tính số khoảng trắng trước mỗi dòng, việc này đơn giản thôi. Em xin trình bày code của em ở đây. Mỗi khi trình bày em cố gắng trình bày cả phương pháp suy luận cho các bạn mới học có thể tiếp cận dễ dàng và áp dụng cho các bài khác.
Code:
// hàm này in ra tháp số với tọa độ của số trên cùng là (topX, topY).
// n là độ cao của tháp số
// hàm này in ra tháp số dạng tam giác cân (dạng còn lại suy luận tương tự).
// Giả sử khi gọi hàm thì con trỏ nằm ở tọa độ (1,1).
// Thuật toán:
//Với dòng thứ i của tháp số (dòng thứ topY+i-1 trên màn hình),
//ta sẽ bắt đầu in số đầu tiên (số i) tại cột topX-i+1 của màn hình.
void ShowNestedFor(int topX, int topY, int n)
{
for (i=1;i<=n;i++)
{
// in hàng thứ i
// lúc này con trỏ đã nằm đúng hàng, ta cần di chuyển con trỏ đến cột topX-i+1
for (j=0;j<topX-i+1;j++) printf(" ");
// sau đó in hàng số i
for (j=i;j>0;j--) printf("%d", j);
for (j=1;j<=i;j++) printf("%d", j);
printf("\n");
}
}