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

Hình chữ nhật có diện tích tối đa bằng cách chọn bốn cạnh từ mảng trong C ++


Diện tích hình chữ nhật được tính bằng tích các cạnh của nó. Tất cả các hình chữ nhật có bốn cạnh sao cho các cạnh đối diện bằng nhau. Để tính diện tích, chúng tôi yêu cầu chiều dài và chiều rộng là hai cạnh. Để chúng tôi có được kết quả mong muốn -

Diện tích hình chữ nhật =chiều dài X chiều rộng

Chúng ta được cung cấp một mảng sao cho nó bao gồm các cạnh của một hình chữ nhật. Mảng chứa các giá trị cho cả bốn cạnh theo thứ tự ngẫu nhiên. Nhiệm vụ ở đây là tìm hai cặp cạnh cao nhất từ ​​mảng để có được diện tích tối đa có thể cho hình chữ nhật.

Đầu vào

Arr[] = { 1,2,1,3,4,4,2,3,5,7 }.

Đầu ra - Hình chữ nhật có diện tích tối đa bằng cách chọn bốn cạnh từ mảng - 12

Giải thích - Nếu chúng ta sắp xếp mảng đã cho theo thứ tự giảm dần, chúng ta nhận được,

Arr[]= { 7,5,4,4,3,3,2,1,1 }

Hai cặp cạnh (tổng bốn cạnh) lớn nhất ở đây là {(4,4), (3,3)}. Do đó, diện tích tối đa mong muốn có thể là 12 đơn vị sq.

Đầu vào

Arr[] = { 8,2,5,3,4,9,8,3,5,7 }.

Đầu ra - Hình chữ nhật có diện tích tối đa bằng cách chọn bốn cạnh từ mảng - 40

Giải thích - Nếu chúng ta sắp xếp mảng đã cho theo thứ tự giảm dần, chúng ta nhận được,

Arr[]= { 9,8,8,7,5,5,4,3,3,2 }

Hai cặp cạnh (tổng bốn cạnh) lớn nhất ở đây là {(8,8), (5,5)}. Do đó, diện tích tối đa mong muốn có thể là 40 đơn vị sq.

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

  • Khai báo một mảng các số nguyên chứa các cặp cạnh của hình chữ nhật. (Arr [])

  • Tạo một biến để lưu trữ kích thước của mảng. (n)

  • Hàm maxArea (int arr [], int n) được sử dụng để tính diện tích tối đa cho hình chữ nhật. Nó nhận một mảng đầu vào và kích thước của nó làm đối số.

  • Bên trong maxArea (), chúng tôi đã khai báo một mảng Dim [2] hai lưu trữ hai cạnh cao nhất được tìm thấy sau khi duyệt qua mảng đã sắp xếp (theo thứ tự giảm dần) arr [].

  • Vì arr [] được sắp xếp theo thứ tự giảm dần, 4 cạnh cao nhất phải ở đầu. Chúng tôi lặp lại arr [] để tìm thấy một cặp cạnh.

  • Khởi tạo Dim [] bằng 0 lúc đầu.

  • Bên trong vòng lặp while, chúng tôi đặt điều kiện rằng nó tiếp tục cho đến khi j <2 mà không có giá trị nào được tìm thấy cho dim [0] và dim [1] hoặc đạt đến cuối arr []. (i

  • Nếu tìm thấy một cặp cạnh như vậy, (if (arr [i] ==arr [i + 1])), thì lưu trữ nó trong dim [j] và tăng j cho cạnh tiếp theo.

  • Trả về kết quả dưới dạng tích số của dim [0] và dim [1].

  • Lưu ý - sort (arr, n) được cho là sắp xếp arr theo thứ tự giảm dần.

Ví dụ

#include <iostream>
using namespace std;
// function for finding max area for rectangle
int maxArea(int arr[], int n){
   int dim[2]={0};
   int i=0,j=0;
   while( j<2 && i<n){
      if(arr[i]==arr[i+1]){
         dim[j++]=arr[i];
      }
      ++i;
   }
   return dim[0]*dim[1];
}
// driver function
int main(){
   int arr[] = { 1,8,5,1,8,2,5,3 };
   int n = 8;
   sort(arr,n); // supposed to sort array in descending order
   cout <<”Maximum area of rectangle by picking four sides from array:”<< maxArea(arr, n);
   return 0;
}

Đầu ra

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

Maximum area of rectangle by picking four sides from array: 40