Editorial for C Bài 2.B1: Hình tam giác đều


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Author: buitrunghieu

Hướng dẫn

Để tô được một tam giác cân thỏa mãn yêu cầu đề bài, ta cần sử dụng hai vòng lặp lồng vào nhau. Với ý tưởng là in ra một ma trận \(n\) dòng \(2n - 1\) cột, mỗi ô trong ma trận có thể tô bằng dấu * hoặc khoảng trống. Để ý rằng sẽ luôn có 1 dấu * ở cột thứ \(n\), lấy cột thứ \(n\) làm cột đối xứng. Để ý rằng ở mỗi phía của cột đối xứng (phía bên trái là từ cột 1 đến cột \(n-1\), phía bên phải là từ cột \(n+1\) đến cột \(2n-1\)), số dấu * ở dòng dưới sẽ nhiều hơn số dấu * ở dòng trên 1 dấu, và nằm bên cạnh dấu * gần nhất ở dòng đó. Ta có thể sử dụng phát hiện trên để vẽ hình tam giác cân thỏa mãn yêu cầu.

Độ phức tạp của thuật toán này là \(O(n^2)\).

Code mẫu

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n * 2 - 1; j++){
            //Kiểm tra xem ô đang xét và ô đối xứng nó có phù hợp để tô dấu * hay không
            if(j >= n - i + 1 && j <= n + i - 1){
                printf("*");
            }

            //Nếu không thì không tô
            else{
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}

Đăng ký khóa học: https://www.facebook.com/clblaptrinhfullhouse

SĐT liên hệ: 0372229686

Youtube: CLB Lập Trình Full House

Fullhouse dev đồng hành trên từng dòng code


Comments

There are no comments at the moment.