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

หาผลคูณของคู่สมาชิกติดกัน (Pairwise Consecutive) ในอาร์เรย์ C++

งานคือหาผลคูณของคู่สมาชิกติดกันทุกคู่ในอาร์เรย์ สำหรับอาร์เรย์ขนาด n จะมี n-1 คู่

ตัวอย่าง

ตัวอย่างที่ 1

Input: arr[] = {1, 2, 3, 4}

คู่: (1,2), (2,3), (3,4)

ผลคูณ: 2, 6, 12

Output: 2 6 12

ตัวอย่างที่ 2

Input: arr[] = {9, 5, 1, 2, 6, 10}

คู่: (9,5), (5,1), (1,2), (2,6), (6,10)

ผลคูณ: 45, 5, 2, 12, 60

Output: 45 5 2 12 60

แนวทางแก้ปัญหา

  1. วนลูป i จาก 0 ถึง n-2
  2. คำนวณ product = arr[i] * arr[i+1]
  3. พิมพ์หรือเก็บผลลัพธ์

ตัวอย่างโค้ด

#include <iostream>
#include <vector>
using namespace std;

vector<long long> pairwiseProducts(const vector<int>& arr) {
    vector<long long> result;
    int n = arr.size();
    for (int i = 0; i < n - 1; i++) {
        result.push_back(1LL * arr[i] * arr[i + 1]);
    }
    return result;
}

void printPairwiseProducts(const vector<int>& arr) {
    int n = arr.size();
    for (int i = 0; i < n - 1; i++) {
        cout << 1LL * arr[i] * arr[i + 1];
        if (i < n - 2) cout << " ";
    }
    cout << endl;
}

int main() {
    vector<int> arr = {2, 4, 6, 8, 10, 12, 14};
    cout << "Pairwise products: ";
    printPairwiseProducts(arr);
    
    // หรือเก็บใน vector
    auto products = pairwiseProducts(arr);
    cout << "As vector: ";
    for (long long p : products) cout << p << " ";
    cout << endl;
    
    return 0;
}

ผลลัพธ์

Pairwise products: 8 24 48 80 120 168
As vector: 8 24 48 80 120 168

การประยุกต์ใช้

  • Signal Processing: Autocorrelation, Convolution
  • Time Series: ความแตกต่างระหว่างจุดติดกัน (differencing)
  • Image Processing: Edge detection (gradient)
  • Algorithms: Sliding window size 2

ความซับซ้อน

  • เวลา: O(N)
  • พื้นที่: O(1) เพิ่มเติม (หากแค่พิมพ์), O(N) หากเก็บทั้งหมด

ขยายความ: ผลคูณของคู่ที่ห่างกัน k (Stride k)

vector<long long> strideProducts(const vector<int>& arr, int k) {
    vector<long long> result;
    for (int i = 0; i + k < arr.size(); i++) {
        result.push_back(1LL * arr[i] * arr[i + k]);
    }
    return result;
}