เราได้รับอาร์เรย์สองชุด สมมติว่า 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