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

Số vuông 2x2 tối đa nhét vào tam giác vuông cân trong C


Cho tam giác vuông cân (hai cạnh góc vuông bằng nhau). Mục tiêu tìm số vuông cạnh 2 đơn vị nhét được vào tam giác. Cạnh đáy hoặc cao (bằng nhau) làm đầu vào. Số vuông là đầu ra.

Tham khảo hình dưới:

Số vuông 2x2 tối đa nhét vào tam giác vuông cân trong C

Tam giác cao ag, đáy gd có 3 vuông cạnh 2. Từ đỉnh 'a' và 'd', tam giác aib và cde không đóng góp vuông. Do đó luôn cần 2 đơn vị thêm cho các tam giác góc. Chia phần đáy còn lại cho 2 để đếm vuông. Tương tự cho cao.

while (base > 2)
    squares += (base - 2) / 2;
    base = base - 2.
Dùng công thức Ap = b*(b+1)/2... với b mới = b-2

Hiểu qua ví dụ.

Đầu vào - Cạnh đáy: 12

Đầu ra - Số vuông: 15

Giải thích

base 12>2, vuông 10/2=5, base mới 10
base 10>2, vuông 8/2=4, base mới 8
base 8>2, vuông 6/2=3, base mới 6
base 6>2, vuông 4/2=2, base mới 4
base 4>2, vuông 2/2=1, base mới 2
base 2>2 KẾT THÚC
Tổng vuông = 5+4+3+2+1 = 15

Đầu vào - 5

Đầu ra - Số vuông = 1

Giải thích

base 5>2, vuông 3/2=1, base mới 3
base 3>2, vuông 1/2=0, base mới 1
base 1>2 KẾT THÚC
Tổng vuông = 1

Phương pháp chương trình

  • Biến nguyên base lưu đáy tam giác.

  • Hàm numofSquares(int b) đếm số vuông tam giác đáy b chứa được.

  • Trước tiên b = b - 2 (khử phần góc).

  • Theo công thức, b = floor(b/2), b mới này chứa b*(b+1)/2 vuông cạnh 2.

  • Trả về kết quả.

Ví dụ

#include <stdio.h>
#include <math.h>
int numofSquares(int b) {
    // Loại phần thừa ở góc
    b = (b - 2);
    // Mỗi vuông có đáy dài 2
    b = floor(b / 2);
    return b * (b + 1) / 2;
}
int main() {
    int base = 8;
    printf("So vuong toi da co the chua: %d", numofSquares(base));
    return 0;
}

Kết quả

Chạy code cho đầu ra:

So vuong toi da co the chua: 6