从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

说明-没有对具有相同的数字总和,因此count为0。

以下程序中使用的方法如下-

  • 创建两个数组,假设是arr_1 []和arr_2 []

  • 使用该length()函数计算两个数组的长度,该函数将根据数组中的元素返回一个整数值。

  • 创建一个set类型变量,假设st

  • 我的启动循环为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;
//查找功能
//数字的总和
int sumdigits(int n){
   int sum = 0;
   while (n > 0){
      sum += n % 10;
      n = n / 10;
   }
   return sum;
}
//函数计算对数
int paircount(int arr_1[], int arr_2[], int size1, int size2){
   //设置用于避免重复对
   set<pair<int, int> > myset;
   for (int i = 0; i < size1; i++){
      for (int j = 0; j < size2; j++){
         //检查数字总和
         //两个元素中的
         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 myset.size();
}
//驱动程式码
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