একটি সর্টেড (sorted) অ্যারে দISTINCT ধনাত্মক পূর্ণসংখ্যা সহ দেওয়া থাকলে, সব ট্রিপলেট (triplet) খুঁজে বের করতে হবে যা পূর্ণসংখ্যা কমন রেশিও (common ratio) দিয়ে জ্যামিতিক ধারা (Geometric Progression) গঠন করে। অ্যারে [1, 2, 6, 10, 18, 54] হলে ট্রিপলেটগুলো: (2, 6, 18) এবং (6, 18, 54)।
সমাধান: দ্বিতীয় উপাদান থেকে শুরু করে প্রতিটি উপাদানকে মিডেল (middle) ধরে, ছোট ও বড় উপাদান খুঁজে বের করা। মিডেল উপাদান 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)