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

C에서 더 작은 숫자 뒤에 더 큰 요소가 나타나도록 두 요소 사이의 최대 차이


크기가 N인 정수 배열이 제공됩니다. 배열은 임의의 순서로 정수로 구성됩니다. 작업은 더 큰 요소가 더 작은 숫자 뒤에 나타나도록 두 요소 사이의 최대 차이를 찾는 것입니다. 즉, Arr[j]-Arr[i]는 j>i가 되도록 최대값입니다.

입력

Arr[] = { 2,1,3,8,3,19,21}.

출력 − 큰 요소가 작은 숫자 뒤에 나타나도록 두 요소 간의 최대 차이 − 20

설명 − 최대 차이는 21과 1 사이이며 배열에서 1 다음에 21이 나타납니다.

입력

Arr[] = {18, 2,8,1,2,3,2,6 }.

출력 − 큰 요소가 작은 숫자 뒤에 나타나도록 두 요소 간의 최대 차이 - 6

설명 − 최대 차이는 8과 2 사이이며 배열에서 2 이후에 8이 나타납니다.

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

  • 직사각형의 변 쌍을 포함하는 정수 배열을 선언하십시오.( 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 <stdio.h>
int maxDiff(int arr[], int n){
   // Maximum difference found so far
   int MD = arr[1] - arr[0];
   // Minimum number visited so far
   int min = arr[0];
   for(int i = 1; i < n; i++){
      if (arr[i] - min > MD)
         MD = arr[i] - min;
      if (arr[i] < min)
         min = arr[i];
   }
   return MD;
}
/* Driver program to test above function */
int main(){
   int arr[] = {2,5,7,3,4,12};
   int n=6;
   // Function calling
   printf("Maximum difference is : %d ",maxDiff(arr, n));
   return 0;
}

출력

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

The maximum difference between two elements such that the larger element appears after the smaller number : 10