查找具有任意两个元素差异的m个元素的集合在C ++中可被k整除
假设我们有一个包含N个正整数和另一个变量K的数组。我们必须精确地找到m个元素,使得任意两个元素之间的差等于k。因此,如果数组为A=[4、7、10、6、9],并且k=3和m=3,则输出将为“是”。我们可以找到三个元素,例如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