Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ triplets ทั้งหมดในอาเรย์ที่จัดเรียงที่สร้าง AP ใน C++


ในปัญหานี้ เราจะได้รับอาร์เรย์ของตัวเลขและเราจำเป็นต้องค้นหาแฝดสามที่มี are อยู่ในรูปของการคำนวณทางคณิตศาสตร์

ความก้าวหน้าทางคณิตศาสตร์ คือชุดของตัวเลขที่มีความต่างระหว่างพจน์ที่ต่อเนื่องกัน

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากันดีกว่า −

Input :
array = {2 , 5 , 7, 8 , 9 , 10}
Output :
2 5 8
5 7 9
7 8 9
8 9 10

ในการแก้ปัญหานี้ วิธีแก้ไขง่ายๆ คือการเรียกใช้สามลูปและตรวจสอบแฝดสามทั้งหมดหากอยู่ใน AP แต่วิธีนี้มีเวลาซับซ้อนของคำสั่ง n 3 .

ทางออกที่ดีกว่าคือการใช้การแฮช ในวิธีนี้ เราจะเริ่มจากองค์ประกอบที่สองของอาร์เรย์ และถือว่าทุกองค์ประกอบเป็นองค์ประกอบกลางของ AP และตรวจสอบว่าองค์ประกอบดังกล่าวเป็น AP หรือไม่

ตัวอย่าง

#include <iostream>
using namespace std;
void TripletsAP(int arr[], int n){
   for (int i = 1; i < n - 1; i++){
      for (int j = i - 1, k = i + 1; j >= 0 && k < n;){
         if (arr[j] + arr[k] == 2 * arr[i]){
            cout<<arr[j]<<"\t"<<arr[i]<<"\t"<< arr[k] << endl;
            k++;
            j--;
         }
         else if (arr[j] + arr[k] < 2 * arr[i])
            k++;
         else
            j--;
      }
   }
}
int main(){
   int arr[] = {2 , 5 , 7, 8 , 9 , 10};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The triplets that are in AP are : \n";
   TripletsAP(arr, n);
   return 0;
}

ผลลัพธ์

แฝดสามที่อยู่ใน AP คือ −

2 5 8
5 7 9
7 8 9
8 9 10