Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 배열에서 4면을 선택하여 최대 면적 사각형


사각형의 면적은 측면의 곱으로 계산됩니다. 모든 직사각형은 마주보는 변의 길이가 같도록 4개의 변을 가지고 있습니다. 면적을 계산하려면 길이와 너비가 두 변으로 필요합니다. 원하는 결과를 얻을 수 있도록 −

면적 직사각형 =길이 X 너비

사각형의 측면으로 구성된 배열이 제공됩니다. 배열에는 네 면 모두에 대한 값이 무작위 순서로 포함됩니다. 여기서 작업은 직사각형에 가능한 최대 면적을 얻기 위해 배열에서 가장 높은 두 쌍의 변을 찾는 것입니다.

입력

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

출력 − 배열에서 4개의 변을 선택하여 최대 영역 직사각형 − 12

설명 − 주어진 배열을 내림차순으로 정렬하면,

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

여기서 최대인 두 쌍의 변(총 네 변)은 { (4,4),(3,3) }입니다. 따라서 원하는 최대 면적은 12제곱미터입니다.

입력

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

출력 − 배열에서 4개의 변을 선택하여 최대 영역 직사각형 − 40

설명 − 주어진 배열을 내림차순으로 정렬하면,

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

여기서 최대인 두 쌍의 변(총 네 변)은 { (8,8),(5,5) }입니다. 따라서 원하는 최대 면적은 40제곱미터입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 직사각형의 변 쌍을 포함하는 정수 배열을 선언하십시오.( Arr[] )

  • 배열의 크기를 저장할 변수를 만듭니다. (n)

  • maxArea(int arr[],int n) 함수는 사각형의 최대 면적을 계산하는 데 사용됩니다. 입력 배열과 크기를 인수로 사용합니다.

  • maxArea() 내부에서 정렬된 배열(내림차순) arr[]을 탐색한 후 발견된 두 개의 가장 높은 저장 두 변을 발견한 배열 Dim[2]을 선언했습니다.

  • arr[]은 내림차순으로 정렬되므로 가장 높은 4면이 시작 부분에 있어야 합니다. 한 쌍의 변을 찾을 수 있도록 arr[]을 반복합니다.

  • Dim[]을 처음에는 0으로 초기화합니다.

  • while 루프 안에는 j<2까지 계속된다는 조건을 넣어 dim[0]과 dim[1]에 대한 값이 발견되지 않거나 arr[]의 끝에 도달합니다. (i

  • 그러한 변의 쌍이 발견되면( if(arr[i]==arr[i+1]) ), dim[j]에 저장하고 다음 변에 대해 j를 증가시킵니다.

  • 결과를 dim[0]과 dim[1]의 곱으로 반환합니다.

  • 참고 - sort(arr,n)는 arr을 내림차순으로 정렬해야 합니다.

예시

#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;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

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