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

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

เราได้รับอาร์เรย์สองชุด arr_1[] และ arr_2[] ที่มีค่าจำนวนเต็ม งานคือการนับจำนวนคู่ที่แตกต่างกัน (distinct pairs) ที่มีผลรวมของตัวเลข (sum of digits) เท่ากัน โดยเลือกค่าหนึ่งจาก 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

คำอธิบาย − ไม่มีคู่ใดที่มีผลรวมตัวเลขเท่ากัน

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

  • สร้างอาร์เรย์สองชุด arr_1[] และ arr_2[]
  • คำนวณขนาดของทั้งสองอาร์เรย์
  • ใช้ set เพื่อเก็บคู่ที่ไม่ซ้ำกัน (pair<int, int>)
  • วนลูป i สำหรับ arr_1 และลูป j สำหรับ arr_2
  • คำนวณผลรวมตัวเลขของแต่ละค่า
  • ถ้าผลรวมเท่ากัน ให้เพิ่มคู่เข้า set (เรียงค่าน้อยก่อนเพื่อป้องกันซ้ำ)
  • คืนค่าขนาดของ set

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

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

int sumDigits(int n) {
    int sum = 0;
    while (n > 0) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

int pairCount(int arr1[], int arr2[], int size1, int size2) {
    set> mySet;
    for (int i = 0; i < size1; i++) {
        for (int j = 0; j < size2; j++) {
            if (sumDigits(arr1[i]) == sumDigits(arr2[j])) {
                if (arr1[i] < arr2[j])
                    mySet.insert({arr1[i], arr2[j]});
                else
                    mySet.insert({arr2[j], arr1[i]});
            }
        }
    }
    return mySet.size();
}

int main() {
    int arr1[] = {1, 22, 42, 17};
    int arr2[] = {5, 31, 6, 8};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    cout << "count is " << pairCount(arr1, arr2, size1, size2);
    return 0;
}

ผลลัพธ์

count is 3

บทความนี้อธิบายวิธีนับคู่ที่ไม่ซ้ำกันจากสองอาร์เรย์ที่มีผลรวมของหลักตัวเลขเท่ากัน โดยใช้ฟังก์ชันคำนวณผลรวมตัวเลขและ set เพื่อกำจัดคู่ซ้ำ