在 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)
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP