Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chương trình C in kim tự tháp rỗng và hình thoi (hollow pyramid và diamond pattern)


Phần này xem cách tạo kim tự tháp rỗng và hình thoi (diamond) dùng C. Kim tự tháp đặc dễ tạo. Để làm rỗng, thêm vài thủ thuật.

Kim tự tháp rỗng (Hollow Pyramid)

Dòng đầu in 1 sao, dòng cuối in n sao. Các dòng khác in đúng 2 sao ở đầu và cuối dòng, giữa có khoảng trống.

Ví dụ mã

#include <stdio.h>
int main() {
    int n, i, j;
    printf("Nhập số dòng: ");
    scanf("%d", &n);
    for(i = 1; i <= n; i++) {
        for(j = 1; j <= (n-i); j++) { // in khoảng trống trước sao
            printf(" ");
        }
        if(i == 1 || i == n) { // dòng đầu/cuối in sao liên tục
            for(j = 1; j <= i; j++) {
                printf("* ");
            }
        } else {
            printf("*"); // sao đầu và cuối dòng
            for(j = 1; j <= 2*i-3; j++) { // in khoảng trống làm rỗng
                printf(" ");
            }
            printf("*");
        }
        printf("\n");
    }
}

Kết quả

Nhập số dòng: 20
                    *
                   * *
                  *   *
                 *     *
                *       *
               *         *
              *           *
             *             *
            *               *
           *                 *
          *                   *
         *                     *
        *                       *
       *                         *
      *                           *
     *                             *
    *                               *
   *                                 *
  *                                   *
 *                                     *
* * * * * * * * * * * * * * * * * * * *

Hình thoi rỗng (Hollow Diamond)

Dòng đầu và cuối in 1 sao. Các dòng khác in 2 sao đầu/cuối, giữa có khoảng trống. Hình thoi có 2 phần: nửa trên và nửa dưới. Nửa trên tăng khoảng trống, nửa dưới giảm. Chia số dòng bằng biến mid.

Ví dụ mã

#include <stdio.h>
int main() {
    int n, i, j, mid;
    printf("Nhập số dòng: ");
    scanf("%d", &n);
    if(n % 2 == 1) { // n lẻ, tăng 1 thành chẵn
        n++;
    }
    mid = (n/2);
    for(i = 1; i <= mid; i++) {
        for(j = 1; j <= (mid-i); j++) {
            printf(" ");
        }
        if(i == 1) {
            printf("*");
        } else {
            printf("*"); // sao đầu và cuối dòng
            for(j = 1; j <= 2*i-3; j++) {
                printf(" ");
            }
            printf("*");
        }
        printf("\n");
    }
    for(i = mid+1; i < n; i++) {
        for(j = 1; j <= i-mid; j++) {
            printf(" ");
        }
        if(i == n-1) {
            printf("*");
        } else {
            printf("*"); // sao đầu và cuối dòng
            for(j = 1; j <= 2*(n-i)-3; j++) {
                printf(" ");
            }
            printf("*");
        }
        printf("\n");
    }
}

Kết quả

Nhập số dòng: 15
            *
           * *
          *   *
         *     *
        *       *
       *         *
      *           *
     *             *
    *               *
     *             *
      *           *
       *         *
        *       *
         *     *
          *   *
           * *
            *