Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับองค์ประกอบที่หารด้วยอย่างน้อยหนึ่งองค์ประกอบในอีกอาร์เรย์ใน C++


เราได้รับอาร์เรย์สองชุด สมมติว่า arr_1[] และ arr_2[] มีค่าจำนวนเต็มและภารกิจคือการคำนวณจำนวนองค์ประกอบที่หารด้วยองค์ประกอบอย่างน้อยหนึ่งรายการในอีกอาร์เรย์หนึ่ง หมายความว่าเราต้องนับองค์ประกอบเหล่านั้นที่มีอย่างน้อยหนึ่งปัจจัยในอาร์เรย์ที่สองซึ่งก็คือ arr_2

อาร์เรย์ประเภทโครงสร้างข้อมูลที่สามารถจัดเก็บคอลเล็กชันแบบต่อเนื่องที่มีขนาดคงที่ขององค์ประกอบประเภทเดียวกัน อาร์เรย์ใช้เพื่อจัดเก็บชุดข้อมูล แต่มักจะมีประโยชน์มากกว่าที่จะคิดว่าอาร์เรย์เป็นชุดของตัวแปรประเภทเดียวกัน

ตัวอย่าง

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

คำอธิบาย − มี 5 องค์ประกอบใน arr_1[] และ 4 องค์ประกอบใน arr_2[] องค์ประกอบทั้งหมดใน arr_1[] หารด้วย arr_2[] ลงตัว นับเป็น 5

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

คำอธิบาย − มี 5 องค์ประกอบใน arr_1[] และ 2 องค์ประกอบใน arr_2[] ไม่มีองค์ประกอบใดใน arr_1[] ที่หารด้วย arr_2[] ลงตัว นับเป็น 0

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • สร้างสองอาร์เรย์ สมมติว่า arr_1[] และ arr_2[]

  • คำนวณความยาวของอาร์เรย์ทั้งสองโดยใช้ฟังก์ชัน length() ที่จะคืนค่าจำนวนเต็มตามองค์ประกอบในอาร์เรย์

  • ใช้ตัวแปรชั่วคราวที่จะเก็บจำนวนองค์ประกอบ

  • สร้างตัวแปร unordered_set สมมติว่าเรา

  • เริ่มวนรอบสำหรับ i ถึง 0 และฉันน้อยกว่าขนาดของอาร์เรย์ที่สอง

  • ภายในลูปดำเนินการแทรก arr_2[i].

  • เริ่มการวนซ้ำอีกครั้งสำหรับ i ถึง 0 และฉันน้อยกว่าขนาดของอาร์เรย์แรก

  • ภายในลูป เริ่มวนซ้ำอีกครั้งสำหรับ j ถึง และ 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