查找“ k”,以使其与每个数组元素的模数在C ++中相同
在本教程中,我们将编写一个程序,查找一个数字,使得其与每个数组元素的模数相同。让我们来看一个例子。
输入−arr={10,4,2}
输出-12
如果有两个数字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将是数组元素的最大值和最小值之间的差。
使用sort方法对数组的值进行排序。
找到最后一个数字和第一个数字之间的差异。
如果差为零,则所有数字均相同。然后,任意数量的模块的结果将得出相同的结果。
否则,找到数字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];
//检查所有元素是否相同
if (d == 0) {
cout << "Infinite number of k's";
return;
}
//求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);
}
}
}
//找出k的
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
结论
如果您对本教程有任何疑问,请在评论部分中提及。