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

นับคู่ที่แตกต่างจากสองอาร์เรย์ที่มีจำนวนหลักเท่ากันใน C++


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

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

ตัวอย่าง

Input − int arr_1[] = {1, 22, 42, 17}
   Int arr_2[] = {1, 31, 6, 8}
Output − count is 4

คำอธิบาย − ทั้งหมดมี 4 คู่ที่มีจำนวนหลักเท่ากัน ได้แก่ (1, 1), (22, 31), (42, 6) และ (17, 8)

Input − int arr_1[] = {1, 22, 42, 17}
   Int arr_2[] = {2, 78, 6, 18}
Output − count is 1

คำอธิบาย - ทั้งหมดมีเพียงคู่เดียวที่มีจำนวนหลักเท่ากัน นั่นคือ (42, 6)

Input − int arr_1[] = {1, 22, 42, 17}
   Int arr_2[] = {2, 78, 16, 18}
Output − count is 0

คำอธิบาย − ไม่มีคู่ใดที่มีจำนวนหลักเท่ากัน นับเป็น 0

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

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

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

  • สร้างตัวแปรประเภทชุด สมมติว่า st

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

  • ภายในลูป เริ่มวนซ้ำอีกครั้งสำหรับ j ถึง 0 และ j น้อยกว่าขนาดของ arr_2[]

  • ตรวจสอบว่า Sum(arr[i]) =sum(arr_2[j]) แล้วตรวจสอบว่า arr_1[i] น้อยกว่า arr_2[j] หรือไม่ จากนั้นจึงแทรก (make_pair(arr_1[i], arr_2[j])

  • อย่างอื่น แทรก(make_pair(arr_2[j], arr_1[i])

  • ส่งคืน st.size()

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <iostream>
#include <set>
using namespace std;
// Function to find the
// sum of digits of a number
int sumdigits(int n){
   int sum = 0;
   while (n > 0){
      sum += n % 10;
      n = n / 10;
   }
   return sum;
}
//function to count the number of pairs
int paircount(int arr_1[], int arr_2[], int size1, int size2){
   // set is used to avoid duplicate pairs
   set<pair<int, int> > myset;
   for (int i = 0; i < size1; i++){
      for (int j = 0; j < size2; j++){
         // check sum of digits
         // of both the elements
         if (sumdigits(arr_1[i]) == sumdigits(arr_2[j])){
            if (arr_1[i] < arr_2[j]){
               myset.insert(make_pair(arr_1[i], arr_2[j]));
            } else{
               myset.insert(make_pair(arr_2[j], arr_1[i]));
            }
         }
      }
   }
   // return size of the set
   return myset.size();
}
// Driver code
int main(){
   int arr_1[] = { 1, 22, 42, 17 };
   int arr_2[] = { 5, 31, 6, 8 };
   int size1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size2 = sizeof(arr_2) / sizeof(arr_2[0]);
   cout <<"count is "<<paircount(arr_1, arr_2, size1, size2);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ &miuns;

count is 3