在 C++ 中查詢 m 個元素的集合,其中任意兩個元素的差值可被 k 整除


假設我們有一個包含 N 個正整數的陣列,還有一個變數 K。我們必須找到恰好 m 個元素,使得任意兩個元素之間的差值等於 k。因此,如果陣列為 A = [4, 7, 10, 6, 9],k = 3 且 m = 3,則輸出將為“yes”。因為我們可以找到三個元素,例如 4、7、10。

為了解決這個問題,我們必須跟蹤元素除以 k 後的餘數。現在建立一個大小為 k 的多維陣列 rem[][],其索引表示餘數,元素將根據其對應餘數除以 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

更新於: 2019-12-18

181 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.