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

หาชุด m องค์ประกอบ ที่ความต่างระหว่างสองตัวใดๆ หาร k ลงตัวใน C++

สมมติว่ามีอาร์เรย์ที่มีจำนวนเต็มบวก N ตัว และตัวแปร K อีกตัว เราต้องหาองค์ประกอบ m ตัวที่แน่นอน ซึ่งความต่างระหว่างองค์ประกอบใดๆ สองตัว หาร k ลงตัว ดังนั้นถ้าอาร์เรย์ A = [4, 7, 10, 6, 9] และ k = 3 และ m = 3 ผลลัพธ์จะเป็น "yes" เนื่องจากเราสามารถหาสามองค์ประกอบได้คือ 4, 7, 10

เพื่อแก้ปัญหานี้ เราต้องติดตามเศษ เมื่อองค์ประกอบถูกหารด้วย k ตอนนี้สร้างอาร์เรย์หลายมิติ rem[][] ขนาด k ดัชนีแสดงเศษ และองค์ประกอบจะเป็นองค์ประกอบตามเศษที่สอดคล้องเมื่อหารด้วย k ตอนนี้โดยการเดินทางผ่านชุดเศษ เราสามารถได้ชุดที่มีขนาดมากกว่าหรือเท่ากับขนาดที่ต้องการ m หากมีอยู่ และความต่างขององค์ประกอบใดๆ ของชุดนั้นจะหาร k ลงตัว

ตัวอย่าง

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

void searchElementsSet(int arr[], int n, int k, int m) {
    vector<int> rem_matrix[k];
    for (int i = 0; i < n; i++) {
        int rem = arr[i] % k;
        rem_matrix[rem].push_back(arr[i]);
    }
    for (int i = 0; i < k; i++) {
        if (rem_matrix[i].size() >= m) {
            cout << "Yes Possible" << endl;
            for (int j = 0; j < m; j++)
                cout << rem_matrix[i][j] << " ";
            return;
        }
    }
    cout << "Impossible";
}

int main() {
    int arr[] = {4, 7, 10, 6, 9};
    int k = 3;
    int m = 3;
    int n = sizeof(arr) / sizeof(arr[0]);
    searchElementsSet(arr, n, k, m);
}

ผลลัพธ์

Yes Possible 4 7 10