在 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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP