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

Đếm phần tử chia hết cho ít nhất một phần tử trong một mảng khác trong C ++

Chúng ta được cung cấp hai mảng, giả sử arr_1 [] và arr_2 [] đều chứa các giá trị nguyên và nhiệm vụ là tính số phần tử chia hết cho ít nhất một phần tử trong một mảng khác. Có nghĩa là ở đó chúng ta cần đếm những phần tử có ít nhất một yếu tố trong mảng thứ hai là arr_2.

Mảng là một loại cấu trúc dữ liệu có thể lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng kiểu. Mảng được sử dụng để lưu trữ một tập hợp dữ liệu, nhưng thường hữu ích hơn nếu coi một mảng là một tập hợp các biến cùng kiểu.

Ví dụ

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

Giải thích - Có 5 phần tử trong arr_1 [] và 4 phần tử trong arr_2 []. Tất cả các phần tử trong arr_1 [] đều chia hết cho arr_2 []. Vì vậy, số đếm là 5.

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

Giải thích - Có 5 phần tử trong arr_1 [] và 2 phần tử trong arr_2 []. Không có phần tử nào trong arr_1 [] chia hết cho arr_2 []. Vì vậy, số lượng là 0.

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

  • Tạo hai mảng, giả sử arr_1 [] và arr_2 []

  • Tính độ dài của cả hai mảng bằng cách sử dụng hàm length () sẽ trả về một giá trị nguyên theo các phần tử trong một mảng.

  • Lấy một biến tạm thời sẽ lưu trữ số lượng phần tử.

  • Tạo một biến unsrdered_set, giả sử chúng tôi

  • Bắt đầu vòng lặp cho tôi đến 0 và tôi nhỏ hơn kích thước của mảng thứ hai.

  • Bên trong vòng lặp, thực hiện chèn trong arr_2 [i].

  • Bắt đầu một vòng lặp khác cho tôi đến 0 và tôi nhỏ hơn kích thước của mảng đầu tiên.

  • Bên trong vòng lặp, bắt đầu một vòng lặp khác cho j đến và j * j <=arr_1 [i]

  • Bên trong kiểm tra này nếu arr_1 [i]% j =0, sau đó kiểm tra xem us.find (j)! =Us.end HOẶC us.find (arr [i] / j)! =Us.end () sau đó tăng số lượng lên 1

  • Khác ,, nghỉ

  • Số lần trả lại

  • In kết quả.

Ví dụ

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

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -

Số lượng
count is 2