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

นับคู่จากสองอาร์เรย์ที่การดำเนินการแบบโมดูโลให้ค่า 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

ผลผลิต − จำนวนคู่จากสองอาร์เรย์ที่การดำเนินการแบบโมดูโลให้ค่า 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

ผลผลิต − จำนวนคู่จากสองอาร์เรย์ที่การดำเนินการแบบโมดูโลให้ค่า 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 loop แทรกคู่เพื่อ set> se โดยที่ A%B=k หรือ B%A=k โดยที่ A เป็นของ arr_1 และ B เป็นของ arr_2 ที่ขนาดสิ้นสุดของชุด se คือจำนวนของคู่ที่ไม่ซ้ำจากสองอาร์เรย์ซึ่งการดำเนินการแบบโมดูโลให้ผลตอบแทน 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) รับทั้งอาร์เรย์และความยาว และส่งคืนคู่เพื่อให้การทำงานของโมดูโลขององค์ประกอบของอาร์เรย์ทั้งสองให้ค่า k

  • ใช้ค่าเริ่มต้นนับเป็น 0

  • ตั้งค่า> se; ของคู่ .

  • เริ่มสำรวจ arr_1[] จาก i=0 ถึง i

  • สำหรับแต่ละคู่ 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

  • คำนวณนับเป็น se.size() สำหรับการนับคู่ที่ไม่ซ้ำ

  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#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