C++程序 打印所有在排序数组中形成等差数列的三元组

C++程序 打印所有在排序数组中形成等差数列的三元组

什么是等差数列?

等差数列指的是一个数列中,每一项与它后面的项的差值相等,这个差值被称为公差,记为d。比如:

1, 3, 5, 7, 9 就是一个公差为2的等差数列。

思路

我们可以用3个指针i,j,k来表示等差数列中的3个元素,i从0开始遍历数组,j从i+1开始,k从j+1开始。如果当a[k] – a[j] a[j] – a[i]时,就找到了一个等差数列的三元组,我们就把它输出来。

示例代码

#include<iostream>
using namespace std;

void findTriplets(int arr[], int n)  
{  
    int count = 0;

    for (int i = 0; i < n - 2; i++)  
    {  
        int j = i + 1; // 左指针
        int k = j + 1; // 右指针

        while (k < n)  
        {  
            if (arr[i] + arr[k] == 2 * arr[j])  
            {  
                cout << arr[i] << " " << arr[j] << " " << arr[k] << endl;
                count++;  
                j++;  
            }  
            else if (arr[i] + arr[k] < 2 * arr[j])  
            {  
                k++;  
            }  
            else
            {
                j++;
            }  
        }  
    }  

    if (count == 0)
    {
        cout << "没有找到等差数列的三元组" << endl;
    }
}

int main()
{
    int arr1[] = { 1, 2, 3, 5, 6, 7, 8, 9, 11, 13 };
    int arr2[] = { 2, 4, 6, 8, 10 };
    int arr3[] = { 1, 3, 5, 7 };

    int n1 = sizeof(arr1) / sizeof(arr1[0]);
    int n2 = sizeof(arr2) / sizeof(arr2[0]);
    int n3 = sizeof(arr3) / sizeof(arr3[0]);

    findTriplets(arr1, n1);
    findTriplets(arr2, n2);
    findTriplets(arr3, n3);

    return 0;
}

代码解析:

我们首先定义了一个findTriplets函数,这个函数的作用就是查找等差数列。

在主函数中,我们定义了3个有序数组,分别对它们进行求解。通过sizeof可以获得数组的长度。

当我们调用findTriplets函数后,它遍历整个数组,寻找等差数列的三元组。如果找到了就输出,如果一个等差数列中没有三元组,则输出”没有找到等差数列的三元组”。

结论

至此,我们能打印所有在排序数组中形成等差数列的三元组的C++程序已经编写完成。就算是在大型数组中也能够高效地找到等差数列的三元组,代码易于理解,逻辑清晰,可以运用于其他语言中。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例