在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