在C++中查找满足与数组每个元素取模结果相同的‘k’
在本教程中,我们将编写一个程序来查找一个数字,使其与数组中每个元素取模的结果都相同。让我们来看一个例子。
输入 − arr = {10, 4, 2}
输出 − 1 2
如果有两个数字x, y 且 x > y,假设x - y = d.
那么x = y + d。
假设我们有一个数字k,使得 x%k = y%k。对上述等式应用模k运算,并求出值d。
x%k = (y+d)%k y%k = y%k +d%k d%k = 0
根据上述计算,如果数字k是x和y之差的约数,那么它将是x和y的约数。
让我们将同样的概念应用于数组元素,并找到k值。请查看解决问题的步骤。
用数字初始化数组
这里,d将是数组元素的最大值和最小值之差。
使用排序方法对数组的值进行排序。
求出最后一个数字和第一个数字的差。
如果差为零,则所有数字都相同。然后,与任何数字取模的结果都相同。
否则,找到数字d的约数,并将它们存储起来。
遍历所有约数,找到与所有数组元素取模结果相同的数字。
示例
让我们看看代码。
#include <bits/stdc++.h> using namespace std; void findNumbers(int arr[], int n) { sort(arr, arr + n); int d = arr[n - 1] - arr[0]; // check whether all elements are same or not if (d == 0) { cout << "Infinite number of k's"; return; } // finding the divisors of d vector <int> v; for (int i = 1; i * i <= d; i++) { if (d % i == 0) { v.push_back(i); if (i != d / i) { v.push_back(d / i); } } } // findind the k's for (int i = 0; i < v.size(); i++) { int temp = arr[0] % v[i]; int j; for (j = 1; j < n; j++) { if (arr[j] % v[i] != temp) { break; } } if (j == n) cout << v[i] << " "; } cout << endl; } int main() { int arr[] = {10, 4, 2}; findNumbers(arr, 3); return 0; }
输出
如果运行上述代码,则会得到以下结果。
1 2
结论
如果您在本教程中遇到任何疑问,请在评论区提出。
广告