各配列要素でのモジュラスがC++で同じになるように「k」を見つける
このチュートリアルでは、各配列要素の係数が同じになるような数値を見つけるプログラムを作成します。例を見てみましょう。
入力 − arr ={10、4、2}
出力 − 1 2
x、yの数字が2つある場合 および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
結論
チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。
-
C ++での混乱のカウント(元の位置に要素が表示されないような順列)
混乱とは、元の位置に数字が表示されないようにN個の数字を並べ替えることです。たとえば、{1,2,3}の考えられる混乱の1つは、{1,1,3}です。この中の要素は元の位置にありません。ここでの目標は、N個の数字の混乱の可能性を数えることです。 これは、再帰的なソリューションを使用して行います。以下の番号について。要素の- N =0、混乱なし、1を返します N =1、1つの数値のみ、0を返します N =2、可能な位置の交換は1つだけ、{1,2}→{1,1}、1を返す N =3、2つの可能な順列、例:{1,2,3}→{1,3,1}、{3,1,2}カウント2 N =4、9つの可能な順列
-
各配列要素のモジュラスが同じになるように「k」を見つけるC++プログラム
この記事では、特定の配列の各要素での係数が同じになるように、整数「k」を見つけるプログラムについて説明します。 たとえば、配列が与えられたとしましょう。 arr = {12, 22, 32} 次に、k =1、2、5、10の出力値があります。 y)の2つの値の場合を考えてみましょう。次に、(y + Difference)%k =y%kになります。これを解決すると、 difference%k = 0 したがって、配列内の最大要素と最小要素の差に対するすべての除数を見つけてから、配列内のすべての要素の余りが同じかどうかを各除数で確認します。 例 #include<bits/stdc++