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:

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