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

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

เราได้รับอาร์เรย์สองชุด arr_1[] และ arr_2[] งานคือการนับจำนวนองค์ประกอบใน arr_1 ที่หารด้วยอย่างน้อยหนึ่งองค์ประกอบใน arr_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 ลงตัวมี 2 ตัว

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

คำอธิบาย − ไม่มีองค์ประกอบใน arr_1 ที่หารด้วยสมาชิกใน arr_2 ลงตัว

แนวทางการแก้ปัญหา

  • สร้างอาร์เรย์สองชุด
  • คำนวณขนาดทั้งสองอาร์เรย์
  • ใช้ unordered_set เก็บค่าของ arr_2 เพื่อค้นหาเร็ว
  • วนลูปแต่ละค่าใน arr_1 หาตัวหารทั้งหมด (ตรวจสอบจนถึงรากที่สอง)
  • ถ้าพบตัวหารอยู่ใน set ของ arr_2 ให้เพิ่มตัวนับและ break

ตัวอย่างโค้ด C++

#include <iostream>
#include <unordered_set>
using namespace std;

int totalElements(int arr1[], int size1, int arr2[], int size2) {
    int result = 0;
    unordered_set h;
    for (int i = 0; i < size2; i++) h.insert(arr2[i]);
    
    for (int i = 0; i < size1; i++) {
        for (int j = 1; j * j <= arr1[i]; j++) {
            if (arr1[i] % j == 0) {
                if (h.count(j) || h.count(arr1[i] / j)) {
                    result++;
                    break;
                }
            }
        }
    }
    return result;
}

int main() {
    int arr1[] = {1, 2, 3, 4, 5};
    int arr2[] = {2, 6, 12, 15};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    cout << "count is " << totalElements(arr1, size1, arr2, size2);
    return 0;
}

ผลลัพธ์

count is 2

บทความนี้อธิบายวิธีนับสมาชิกในอาร์เรย์แรกที่มีตัวหารอย่างน้อยหนึ่งตัวอยู่ในอาร์เรย์ที่สอง โดยใช้ unordered_set เพื่อการค้นหาที่มีประสิทธิภาพ