在 C++ 中查找形成几何级数的已排序数组中的所有三元组
假设我们有一个包含正整数的已排序数组。我们必须找到组成几何级数的公比为整数的所有三元组。假设数组元素为 [1, 2, 6, 10, 18, 54],三元组为 (2, 6, 18) 和 (6, 18, 54),它们构成了几何级数。
为解决此问题,我们将从第二个元素开始,并将每个元素都定为中间元素,然后搜索较小和较大的元素。对于中间元素 arr[j] 来说,如果它是几何级数的中间,则前面的元素 arr[i] 和 arr[k] 将是
$$\frac{arr[j]}{arr[i]}=\frac{arr[k]}{arr[j]}=r𝑟$$
示例
#include<iostream> using namespace std; void getTriplets(int arr[], int n) { for (int j = 1; j < n - 1; j++) { int i = j - 1, k = j + 1; while (i >= 0 && k <= n - 1) { while (arr[j] % arr[i] == 0 && arr[k] % arr[j] == 0 && arr[j] / arr[i] == arr[k] / arr[j]) { cout << "("<< arr[i] << ", " << arr[j] << ", " << arr[k] << ")" << endl; k++; i--; } if(arr[j] % arr[i] == 0 && arr[k] % arr[j] == 0) { if(arr[j] / arr[i] < arr[k] / arr[j]) i--; else k++; }else if (arr[j] % arr[i] == 0) k++; else i--; } } } int main() { int arr[] = {1, 2, 6, 10, 18, 54}; int n = sizeof(arr) / sizeof(arr[0]); getTriplets(arr, n); }
输出
(2, 6, 18) (6, 18, 54)
广告