Computer >> Máy Tính >  >> Lập trình >> lập trình C

Hình chữ nhật có kích thước tối đa cho trước có thể được cắt ra từ một tờ giấy trong C


Chúng tôi được cung cấp các kích thước của tờ giấy, đó là Chiều dài L và Chiều rộng B. Ngoài ra, chúng tôi được cung cấp kích thước của một hình chữ nhật nhỏ, chiều dài l và chiều rộng b. Mục tiêu là tìm ra số lượng hình chữ nhật nhỏ nhất có thể được cắt ra từ một tờ giấy.

Chúng tôi sẽ thực hiện các bước sau -

  • Đầu tiên, chúng ta sẽ căn chỉnh theo chiều ngang, chiều dài L và l của tấm và hình chữ nhật tương ứng. Bắt đầu căn giữa L theo l và B theo b và đếm các hình chữ nhật.

  • Sau đó, cũng thực hiện tương tự theo hàng dọc. Đếm lại. Trả về giá trị lớn nhất của bộ đếm.

Hãy để chúng tôi hiểu bằng một ví dụ.

Đầu vào

 Trang tính L =18, B =6 Hình chữ nhật l =4, b =3 

Đầu ra

 Hình chữ nhật tối đa:8 

Giải thích

 Ngang 18/4 =4 6/3 =2 2 * 4 =8 hình chữ nhật có thể 

Đầu vào

 Trang tính L =10, B =6 Hình chữ nhật l =4, b =2 

Đầu ra

 Hình chữ nhật tối đa:6 

Giải thích

 Ngang 10/4 =2 6/2 =3 2 * 3 =6 hình chữ nhật có thể 

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Các biến Chiều dài và Chiều rộng được sử dụng để lưu trữ kích thước của trang tính.

  • Các biến len và bre được sử dụng để lưu trữ các kích thước của hình chữ nhật.

  • Hàm maxRectangle (int L, int B, int l, int b) nhận kích thước của trang tính và hình chữ nhật và trả về số lượng hình chữ nhật tối đa có thể.

  • Các biến numh và numv được sử dụng để lưu trữ số lượng hình chữ nhật có thể được cắt theo chiều ngang và chiều dọc.

  • Đối với chiều ngang, chia cols =L / l và row =B / b, có thể là hình chữ nhật, numh =cols * row.

  • Đối với chiều dọc, hãy chia cols =L / b và row =B / l, có thể là hình chữ nhật, numv =cols * row.

  • Trả về giá trị tối đa do kết quả thu được trong hai bước trên là numh hoặc numv.

Ví dụ

 #include  int maxRectaries (int L, int B, int l, int b) {int numh =0, numv =0; // Cắt hình chữ nhật theo chiều ngang nếu có thể if (l <=L &&b <=B) {// Một hình chữ nhật là một ô duy nhất int cols =B / b; int hàng =L / l; // Tổng số hình chữ nhật =tổng số ô numh =row * cols; } // Cắt hình chữ nhật theo chiều dọc nếu có thể if (l <=B &&b <=L) {int cols =L / b; int hàng =B / l; numv =hàng * cols; } // Trả về số hình chữ nhật lớn nhất có thể return numh> numv? Numh:numv;} // Trình điều khiển codeint main () {int Length =18; int Breadth =6; int len ​​=4, bre =3; printf ("Hình chữ nhật tối đa:% d", maxRectangular (Chiều dài, Chiều rộng, len, bre)); trả về 0;} 

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

 Hình chữ nhật có kích thước tối đa cho trước có thể được cắt ra từ một tờ giấy:8