मान लें हमारे पास विशिष्ट धनात्मक पूर्णांकों की एक क्रमबद्ध सरणी है। हमें सभी ट्रिपलेट ज्ञात करने हैं, जो पूर्णांक सामान्य अनुपात के साथ ज्यामितीय प्रगति (Geometric Progression) बनाते हैं। मान लें सरणी तत्व [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)