在本教程中,我们将编写一个程序,查找一个数字,使得其与每个数组元素的模数相同。让我们来看一个例子。
输入− 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将是数组元素的最大值和最小值之间的差。
使用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
如果您对本教程有任何疑问,请在评论部分中提及。