Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm các cặp phân biệt từ hai mảng có tổng các chữ số bằng nhau trong C ++

Chúng ta được cung cấp với hai mảng, giả sử arr_1 [] và arr_2 [] có các giá trị nguyên và nhiệm vụ là tính số lượng các cặp phân biệt có cùng tổng các chữ số. Có nghĩa là, một giá trị phải được chọn từ arr_1 [] và giá trị thứ hai từ arr_2 [] để tạo thành một cặp và cả hai giá trị phải có cùng chữ số tổng.

Mảng là một loại cấu trúc dữ liệu có thể lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng kiểu. Mảng được sử dụng để lưu trữ một tập hợp dữ liệu, nhưng thường hữu ích hơn nếu coi một mảng là một tập hợp các biến cùng kiểu.

Ví dụ

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

Giải thích - tổng cộng có 4 cặp có tổng các chữ số bằng nhau và đó là (1, 1), (22, 31), (42, 6) và (17, 8).

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

Giải thích - tổng cộng chỉ có một cặp có tổng các chữ số bằng nhau và đó là (42, 6).

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

Giải thích - Không có cặp nào có tổng các chữ số bằng nhau nên số đếm là 0.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -

  • Tạo hai mảng, giả sử arr_1 [] và arr_2 []

  • Tính độ dài của cả hai mảng bằng cách sử dụng hàm length () sẽ trả về một giá trị nguyên theo các phần tử trong một mảng.

  • Tạo một biến loại tập hợp, giả sử như st

  • Vòng lặp bắt đầu cho tôi đến 0 và tôi nhỏ hơn kích thước arr_1 []

  • Bên trong vòng lặp, Bắt đầu một vòng lặp khác cho j đến 0 và j nhỏ hơn kích thước của arr_2 [].

  • Kiểm tra xem Sum (arr [i]) =sum (arr_2 [j]), sau đó kiểm tra xem arr_1 [i] nhỏ hơn arr_2 [j] rồi chèn (make_pair (arr_1 [i], arr_2 [j])

  • Khác, chèn (make_pair (arr_2 [j], arr_1 [i]).

  • Trả về st.size ()

  • In kết quả.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau &miuns;

Số lượng
count is 3