查找“ k”,以使其与每个数组元素的模数在C ++中相同

在本教程中,我们将编写一个程序,查找一个数字,使得其与每个数组元素的模数相同。让我们来看一个例子。

输入− arr = {10,4,2}

输出-1 2

如果有两个数字x,yx> 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

根据以上计算,如果数kxy之差的除数。然后它将是数字xy的除数。

让我们将相同的概念应用于元素数组。并找到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

结论

如果您对本教程有任何疑问,请在评论部分中提及。