Cho kích thước tờ giấy: chiều dài L, chiều rộng B. Cũng cho kích thước hình chữ nhật nhỏ: dài l, rộng b. Tìm số hình chữ nhật nhỏ tối đa cắt được từ tờ giấy.
Các bước:
Xét đặt ngang: chiều dài L với l, chiều rộng B với b, đếm số hình chữ nhật.
Xét đặt dọc: tương tự, đếm lại. Trả về giá trị lớn nhất.
Hiểu qua ví dụ.
Đầu vào
Giấy L=18, B=6 HCN nhỏ l=4, b=3
Đầu ra
Số HCN tối đa: 8
Giải thích
Ngang: 18/4=4, 6/3=2 -> 2*4=8 HCN Dọc: 18/3=6, 6/4=1 -> 6*1=6 HCN Tối đa = 8
Đầu vào
Giấy L=10, B=6 HCN nhỏ l=4, b=2
Đầu ra
Số HCN tối đa: 6
Giải thích
Ngang: 10/4=2, 6/2=3 -> 2*3=6 Dọc: 10/2=5, 6/4=1 -> 5*1=5 Tối đa = 6
Phương pháp chương trình
Biến Length, Breadth lưu kích thước giấy.
Biến len, bre lưu kích thước HCN nhỏ.
Hàm maxRectangles(int L, int B, int l, int b) trả về số HCN tối đa.
Biến numh, numv lưu số HCN cắt ngang và dọc.
Ngang: cols = L/l, rows = B/b, numh = rows*cols.
Dọc: cols = L/b, rows = B/l, numv = rows*cols.
Trả về max(numh, numv).
Ví dụ
#include <stdio.h>
int maxRectangles(int L, int B, int l, int b) {
int numh = 0, numv = 0;
// Cắt ngang nếu khả thi
if (l <= L && b <= B) {
int cols = B / b;
int rows = L / l;
numh = rows * cols;
}
// Cắt dọc nếu khả thi
if (l <= B && b <= L) {
int cols = L / b;
int rows = B / l;
numv = rows * cols;
}
return numh > numv ? numh : numv;
}
int main() {
int Length = 18;
int Breadth = 6;
int len = 4, bre = 3;
printf("So HCN toi da: %d", maxRectangles(Length, Breadth, len, bre));
return 0;
}
Kết quả
Chạy code cho đầu ra:
So HCN kich thuoc cho truoc cat duoc tu to giay: 8