((n%i)%j)%nがC++で最大化されるような(i、j)のペアの数
入力として数値numが与えられます。目標は、((num%i)%j)%numが最大化され、iとjの両方が[1、num]の範囲内にあるような形式(i、j)のペアの数を見つけることです。
例を挙げて理解しましょう
入力 − num =4
出力 −((n%i)%j)%nが最大になるような(i、j)のペアの数は− 3
説明 −ペアは次のようになります:(3,2)、(3,3)、(3,4)
入力 − num =6
出力 −((n%i)%j)%nが最大になるような(i、j)のペアの数は− 4
説明 −ペアは次のようになります:(4,3、(4,4)、(4,5)、(4,6)
以下のプログラムで使用されているアプローチは次のとおりです
この問題は、2つのアプローチを使用して解決します。ナイーブなアプローチでは、numを半分にすると、最大の剰余値を取得できます。 temp =num /2+1を設定します。最大余りをtotal=num%tempとして設定します。 i、jを0からnumまでトラバースし、((num%i)%j)%num ==totalとなるようなi、jを見つけます。
-
入力数値を整数とします。
-
関数maximized_pair(int num)はnumを取り、((n%i)%j)%nが最大化されるように(i、j)のペアの数を返します。
-
初期カウントを0とします。
-
余りを最大にするには、numを半分に減らします。 temp =((num / 2)+ 1)を設定します。
-
最大余りを合計として計算=num%temp;
-
ペア(i、j)の場合。 [1、num]の範囲のiとjの2つのforループを使用してトラバースします。
-
値((num%i)%j)%numがtotalに等しい場合は、カウントをインクリメントします。
-
両方のforループの最後に、結果としてカウントが返されます。
効率的なアプローチ
合計としての最大余り=num%temp ここで、tempはnum/ 2 + 1 。ここで、ペア(i、j)の場合、最大の余りを取得するには、numとしてiを選択する必要があります。合計を最大にするために、合計からnumまでの範囲からjを選択できます。したがって、ペアの数は num-totalになります 。
num=2の場合 、ペアが(1,1)、(1,2)、(2,1)、(2,2)になり、num-totalを使用して計算されないため、4を返します。
-
入力数値を整数とします。
-
関数maximized_pair(int num)はnumを取り、((n%i)%j)%nが最大化されるように(i、j)のペアの数を返します。
-
初期カウントを0とします。
-
num ==2の場合、4を返します。
-
それ以外の場合は、numを半分に減らして残りを最大にします。 temp =((num / 2)+ 1)を設定します。
-
最大余りを合計として計算=num%temp;
-
count =num-total
を設定します -
結果として最後にリターンカウント。
例(素朴なアプローチ)
#include<bits/stdc++.h> using namespace std; int maximized_pair(int num){ int count = 0; int temp = ((num / 2) + 1); int total = num % temp; for (int i = 1; i <= num; i++){ for (int j = 1; j <= num; j++){ int check = ((num % i) % j) % num; if (check == total){ count++; } } } return count; } int main(){ int num = 10; cout<<"Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: "<<maximized_pair(num); }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: 6
例(効率的なアプローチ)
#include<bits/stdc++.h> using namespace std; int maximized_pair(int num){ int count = 0; if (num == 2){ return 4; } else{ int temp = ((num / 2) + 1); int total = num % temp; count = num - total; } return count; } int main(){ int num = 10; cout<<"Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: "<<maximized_pair(num); }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: 6
-
C ++で(x%k)*(x / k)==nとなるような最小のxを見つけます
2つの正の整数nとkが与えられ、(x%k)*(x / k)がnと同じになるように、正の整数xを見つける必要があります。したがって、nとkがそれぞれ4と6の場合、出力は10になります。したがって、(10%6)*(10/6)=4です。 x%kの値は[1からk – 1]の範囲にあることがわかっているので(0は含まれません)ここで、nを除算する範囲で可能な整数を見つけるため、与えられた方程式は次のようになります。 * k)/(x%k)+(x%k) 例 #include<iostream> using namespace std; int minValue(int x, int y){ &
-
C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します
配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) { bool pairAvilable = true;