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++程序已经编写完成。就算是在大型数组中也能够高效地找到等差数列的三元组,代码易于理解,逻辑清晰,可以运用于其他语言中。