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

C++의 다른 배열에 있는 적어도 하나의 요소로 나눌 수 있는 요소 수를 계산합니다.

<시간/>

정수 값을 포함하는 arr_1[] 및 arr_2[]라는 두 개의 배열이 제공되고 작업은 다른 배열의 하나 이상의 요소로 나눌 수 있는 요소의 수를 계산하는 것입니다. 그것은 우리가 두 번째 배열인 rr_2에서 적어도 하나의 요소를 갖는 요소를 계산해야 함을 의미합니다.

배열은 같은 유형의 요소에 대한 고정 크기 순차 컬렉션을 저장할 수 있는 일종의 데이터 구조입니다. 배열은 데이터 모음을 저장하는 데 사용되지만 종종 배열을 같은 유형의 변수 모음으로 생각하는 것이 더 유용합니다.

Input − int arr_1[] = {1, 2, 3, 4, 5}
      arr_2[] = {2, 6, 12, 15}
Output − count is 2

설명 - arr_1[]에는 5개의 요소가 있고 arr_2[]에는 4개의 요소가 있습니다. arr_1[]의 모든 요소는 arr_2[]로 나눌 수 있습니다. 따라서 개수는 5입니다.

Input − int arr_1[] = {1, 2, 3, 4, 5}
      arr_2[] = {13, 11}
Output − count is 0

설명 - arr_1[]에는 5개의 요소가 있고 arr_2[]에는 2개의 요소가 있습니다. arr_1[]의 어떤 요소도 arr_2[]로 나눌 수 없습니다. 따라서 개수는 0입니다.

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

  • arr_1[] 및 arr_2[]

    라는 두 개의 배열을 만듭니다.
  • 배열의 요소에 따라 정수 값을 반환하는 length() 함수를 사용하여 두 배열의 길이를 계산합니다.

  • 요소 수를 저장할 임시 변수를 가져옵니다.

  • unordered_set 변수 만들기

  • i에 대한 루프를 0으로 시작하고 i가 두 번째 배열의 크기보다 작습니다.

  • 루프 내부에서 arr_2[i]에 삽입을 수행합니다.

  • i에 대해 다른 루프를 0에서 시작하고 i가 첫 번째 배열의 크기보다 작습니다.

  • 루프 내에서 j to 및 j * j <=arr_1[i]

    에 대해 다른 루프를 시작합니다.
  • 이 검사 내에서 arr_1[i]%j =0이고 us.find(j)!=us.end OR us.find(arr[i]/j) !=us.end()인지 확인한 다음 카운트를 다음과 같이 증가시킵니다. 1

  • 그렇지 않으면 중단

  • 반품 횟수

  • 결과를 인쇄하십시오.

예시

#include <iostream>
#include <unordered_set>
using namespace std;
// Function to count the number of elements
// in first array whose atleast one factor is
// present in the second array
int totalelements(int arr_1[], int size1, int arr_2[], int size2){
   // variable 'result' to count the number of elements
   int result = 0;
   // Hash of second array elements
   unordered_set<int> h;
   for (int i = 0; i < size2; i++){
      h.insert(arr_2[i]);
   }
   // traverse through array elements
   // and find its factors
   for (int i = 0; i < size1; i++){
      for (int j = 1; j * j <= arr_1[i]; j++){
         if (arr_1[i] % j == 0){
            // check if the factor is present in
            // second array using the h
            if ((h.find(j) != h.end()) || (h.find(arr_1[i] / j)!= h.end())){
               result++;
               break;
            }
         }
      }
   }
   return result;
}
// Main function
int main(){
   int arr_1[] = { 1, 2, 3, 4, 5 };
   int arr_2[] = { 2, 6, 12, 15 };
   int size1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size2 = sizeof(arr_2) / sizeof(arr_2[0]);
   cout <<"count is "<<totalelements(arr_1, size1, arr_2, size2);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

count is 2