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

นับคู่จากสองอาเรย์ที่ modulo ให้ค่า K ใน C++


เราได้รับสองอาเรย์ที่มีจำนวนบวกและค่า K เป้าหมายคือหาคู่ที่ไม่ซ้ำของสมาชิกอาเรย์ที่คู่แบบ (A,B) มี A%B=K หรือ B%A=K และ A 属于อาเรย์แรก และ B 属于อาเรย์ที่สอง

มาดูตัวอย่าง

อินพุต − arr_1[] = {1,2,5,3,4}; arr_2[] = {7,1,3}; k=2

เอาต์พุต − จำนวนคู่จากสองอาเรย์ที่ modulo ให้ค่า K คือ 2

คำอธิบาย − คู่คือ (5,7) - (arr_1[2],arr_2[1]) 7%5=2 และ (5,3) - (arr_1[2],arr_2[2]) 5%3=2

อินพุต − arr_1[] = {2,5}; arr_2[] = {3,7}; k=1

เอาต์พุต − จำนวนคู่จากสองอาเรย์ที่ modulo ให้ค่า K คือ 2

คำอธิบาย − คู่คือ (2,3) - (arr_1[0],arr_2[0]) 3%2=1 และ (2,7) - (arr_1[0],arr_2[1]) 7%2=1

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

ในแนวทางนี้เราจะเดินทางทั้งสองอาเรย์ด้วยลูป FOR เพิ่มคู่เข้า set<pair<int, int> > se ที่ A%B=k หรือ B%A=k โดย A 属于 arr_1 และ B 属于 arr_2 ท้ายสุดขนาดของเซต se คือจำนวนคู่ที่ไม่ซ้ำจากสองอาเรย์ที่ modulo ให้ค่า k

  • รับอาเรย์จำนวนเต็ม arr_1[] และ arr_2[] พร้อมความยาว size_arr_1 และ size_arr_2
  • รับจำนวนเต็ม k
  • ฟังก์ชัน modulo_pairs(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int k) รับทั้งสองอาเรย์และความยาว คืนคู่ที่ modulo ของสมาชิกทั้งสองอาเรย์ให้ค่า k
  • กำหนดค่าเริ่มต้นของ count เป็น 0
  • สร้าง set<pair<int, int> > se ของคู่ <int,int>
  • เริ่มเดินทาง arr_1[] จาก i=0 ถึง i<size_arr_1 และ arr_2[] จาก j=0 ถึง j<size_arr_2
  • สำหรับแต่ละคู่ arr_1[i], arr_2[j] ตรวจสอบถ้า arr_1[i]>arr_2[j] ถ้าจริงตรวจสอบ arr_1[i]%arr_2[j]==k ถ้าจริงสร้างคู่ของ arr_1[i] และ arr_2[j] ใส่เซต se
  • มิฉะนั้น ตรวจสอบ arr_2[j]%arr_1[i]==k ถ้าจริงสร้างคู่ของ arr_1[i] และ arr_2[j] ใส่เซต se
  • คำนวณ count = se.size() สำหรับจำนวนคู่ที่ไม่ซ้ำ
  • คืน count

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

#include <bits/stdc++.h>
using namespace std;

int modulo_pairs(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int k){
    int count = 0;
    set<pair<int, int> > se;
    for (int i = 0; i < size_arr_2; i++){
        for (int j = 0; j < size_arr_1; j++){
            if (arr_1[i] > arr_2[j]){
                if (arr_1[i] % arr_2[j] == k){
                    se.insert(make_pair(arr_1[i], arr_2[j]));
                }
            } else {
                if (arr_2[j] % arr_1[i] == k){
                    se.insert(make_pair(arr_2[j], arr_1[i]));
                }
            }
        }
    }
    count = se.size();
    return count;
}

int main(){
    int arr_1[] = { 2, 7, 1, 9 };
    int arr_2[] = { 4, 10, 3, 10 };
    int size_arr_1 = sizeof(arr_1) / sizeof(arr_1[0]);
    int size_arr_2 = sizeof(arr_2) / sizeof(arr_2[0]);
    int k = 3;
    cout<<"Count of pairs from two arrays whose modulo operation yields K are:"<<modulo_pairs(arr_1, arr_2, size_arr_1, size_arr_2, k);
    return 0;
}

เอาต์พุต

หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −

Count of pairs from two arrays whose modulo operation yields K are: 2