当前位置: 首页 > 编程笔记 >

在数组中找到四个元素a,b,c和d,以便在C ++中a + b = c + d

陶泳
2023-03-14
本文向大家介绍在数组中找到四个元素a,b,c和d,以便在C ++中a + b = c + d,包括了在数组中找到四个元素a,b,c和d,以便在C ++中a + b = c + d的使用技巧和注意事项,需要的朋友参考一下

假设我们有一个整数列表。我们的任务是找到四个不同的整数,分别为(a,b)和(c,d)两对,这样a + b = c + d。如果有多个答案,则仅打印一个。假设数组元素像:A = [7,5,9,3,6,4,2],那么对可以是(7,3)和(6,4)

在这里,我们将使用哈希技术。我们使用总和作为键,作为哈希表中的值对。我们必须按照以下步骤解决此问题。

    list-paddingleft-2">
  • 对于0到n – 1范围内的i

    • 求和

    • 如果哈希表已经有总和,则打印前一对和当前对

    • 否则,更新哈希表。

    • 对于i +1至n – 1范围内的j

    示例

    #include<iostream>
    #include<map>
    using namespace std;
    bool getTwoPairs(int arr[], int n) {
       map<int, pair<int, int> > hash_table;
       for (int i = 0; i < n; ++i) {
          for (int j = i + 1; j < n; ++j) {
             int sum = arr[i] + arr[j];
             if (hash_table.find(sum) == hash_table.end())
                hash_table[sum] = make_pair(i, j);
             else {
                pair<int, int> pp = hash_table[sum];
                cout << "(" << arr[pp.first] << " + " << arr[pp.second] << ") = (" << arr[i] << " + " << arr[j] << ")";
                return true;
             }
          }
       }
       cout << "No pairs found";
       return false;
    }
    int main() {
       int arr[] = {7, 5, 9, 3, 6, 4, 2};
       int n = sizeof arr / sizeof arr[0];
       cout << "The pairs are: ";
       getTwoPairs(arr, n);
    }

    输出结果

    The pairs are: (7 + 4) = (5 + 6)
     类似资料:
    • 本文向大家介绍在数组中找到最大的d,使得C ++中的a + b + c = d,包括了在数组中找到最大的d,使得C ++中的a + b + c = d的使用技巧和注意事项,需要的朋友参考一下 假设我们有一组整数。我们必须找到一个数字“ d”,其中d = a + b + c,并且必须最大化(a + b + c),所有a,b,c和d都存在于集合中。该集合将至少容纳一个元素,最多可容纳1000个元素。每

    • 本文向大家介绍计算三元组(a,b,c)的数量,以使C ++中a ^ 2 + b ^ 2 = c ^ 2和1 <= a <= b <= c <= n,包括了计算三元组(a,b,c)的数量,以使C ++中a ^ 2 + b ^ 2 = c ^ 2和1 <= a <= b <= c <= n的使用技巧和注意事项,需要的朋友参考一下 我们得到一个整数n。目标是找到满足条件的三元组(3个数字一组)- a 2

    • 本文向大家介绍在C ++中找到2 ^(2 ^ A)%B,包括了在C ++中找到2 ^(2 ^ A)%B的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序来计算等式2 ^(2 ^ A)%B。 我们将使用递归函数找到方程的值。让我们看看解决问题的步骤。 编写一个带有2个参数A和B的递归函数。 如果A为1,则将4%B返回为2 ^(2 ^ 1)%B = 4%B. 否则用A-1和b递归

    • 任务给你一个排序的整数数组arr。它包含几个唯一的整数(负、正或零)。 您的任务是找到最大的d,使得a b c=d,其中a、b、c和d是arr的不同元素。如果没有找到这样的元素d,则返回null。 例子: 对于arr=[2,3,5,7,12],输出应该是12(这个数组正确传递了我的函数) 对于arr=[-100,-1,0,7,101],输出应该是0(这个不通过) 我可以进行正数检查,但我的函数因负

    • 本文向大家介绍找到将数字分为四部分的方法数量,以使C ++中的a = c和b = d,包括了找到将数字分为四部分的方法数量,以使C ++中的a = c和b = d的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数字n。我们必须找到多种方法将数字分为几部分(a,b,c和d),使得a = c,b = d。因此,如果数字为20,则输出将为4。如[1、1、9、9],[2、2、8、8],[3、3、7

    • 本文向大家介绍查找(a ^ b)%m,其中“ a”在C ++中非常大,包括了查找(a ^ b)%m,其中“ a”在C ++中非常大的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将求解方程(a b)%m,其中a是一个非常大的数字。 公式(a b)%m =(a%m)*(a%m)... b_times。我们可以通过找到a%m的值然后将其乘以b来解决该问题。 让我们看看解决问题的步骤。 初始化