在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
结论
如果您在本教程中遇到任何疑问,请在评论区提出。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP