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

C++에서 엄격하게 증가하는 하위 배열 계산

<시간/>

정수 요소를 포함하는 배열이 주어지고 작업은 먼저 주어진 배열에서 하위 배열을 계산한 다음 하위 배열의 요소가 오름차순인지 여부를 확인하는 것입니다. 그렇다면 우리는 하위 배열을 고려하고 그렇지 않으면 폐기됩니다.

여기서 접근 방식은 0번째와 1번째 위치의 요소가 오름차순이 아닌 경우 하위 배열을 더 이상 확인하지 않는 것입니다.

예:C++에서

입력: 정수 a[] ={1, 7, 5}

출력: 엄격하게 증가하는 하위 배열의 수는 1입니다.

설명 - 가능한 하위 배열에는 {1,7,5}, {1,7}, {7,5}가 포함되며 여기서 {1,7}은 엄격하게 증가하는 순서의 유일한 배열입니다.

입력: 정수 a[] ={1, 2, 7, 10}

출력: 엄격하게 증가하는 하위 배열의 수는 6입니다.

설명 - 가능한 하위 배열에는 {{1, 2}, {1, 2, 7}, {1, 2, 7, 10},{2, 7}, {2, 7, 10} 및 {7, 10}이 포함됩니다. 엄격하게 증가하는 순서입니다.

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

  • 배열이 선언되고 요소가 입력된 다음 추가 처리를 위해 배열의 길이와 함께 countIncSubarrays(a,a.length)라는 함수에 데이터가 전달됩니다.
  • 함수 내부에서 카운트 플래그를 초기화합니다.
  • 0에서 배열 길이까지 루프 FOR i 시작
  • 루프 내에서 i+1에서 배열 길이까지 또 다른 루프 FOR j 시작
  • 루프 내부에서 a[j]가 a[j-1]보다 큰지 확인하고 개수를 늘립니다.
  • 그렇지 않으면 오름차순 검사가 실패하므로 루프를 중단합니다.
  • 메인 함수에서 결과는 함수 호출에서 캡처되어 출력으로 인쇄됩니다.

예시

import java.util.*;
class testqwe {
   static int MAX = 4;
   static int a[] = new int[MAX];
   static Scanner scan = new Scanner(System.in);
   static int countIncSubarrays(int a[], int n) {

      int count = 0;
      for (int i = 0; i < n; i++) {
         for (int j = i + 1; j < n; j++) {
            if (a[j] > a[j - 1])
               count++;
            else
               break;
         }
      }
      return count;
   }

   public static void main(String[] args) {
      for (int i = 0; i < a.length; i++) {
         a[i] = scan.nextInt(); //1,2,7,0
      }
      int result = countIncSubarrays(a, a.length);
      System.out.println("Count of strictly increasing subarrays is " +
         result);
   }
}

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

출력

Count of strictly increasing subarrays is 6