C++でxに最も近いxの倍数またはa^b(aの累乗b)を検索します
a、b、xの3つの値があるとします。 a b に最も近いxの倍数を1つ見つける必要があります 。数値がx=4、a =3、b =3であるとすると、出力は28になります。これは、3 3 に最も近いためです。 =27
アプローチは単純です。これらの条件に従う必要があります-
-
b <0で、a =1の場合、abは1であることが判明するため、xの最も近い倍数は0またはxのいずれかになります。
-
b<0かつa>1の場合、abは1未満であることが判明するため、xの最も近い倍数は0になります。
-
b> 0の場合、abを見つけます。次に、mul =ab / xの整数とすると、xの最も近い倍数はmul * xまたは(mul + 1)* x
例
#include<iostream> #include<cmath> using namespace std; void findMultiple(int a, int b, int x) { cout << "Nearest multiple: "; if (b < 0) { if (a == 1 && x == 1) cout << "1"; else cout << "0"; } int mul = pow(a, b); int ans = mul / x; int ans1 = x * ans; int ans2 = x * (ans + 1); if((mul - ans1) <= (ans2 - mul)){ cout << ans1; } else{ cout << ans2; } } int main() { int a = 3, b = 3, x = 4; findMultiple(a, b, x); }
出力
Nearest multiple: 28
-
C++で指定された値に最も近いk個の要素を検索します
要素が少ない配列Aがあるとします。他に2つの値Xとkがあります。私たちのタスクは、配列AからXの最も近い要素のk個を見つけることです。要素Xが配列に存在する場合、それは出力に表示されません。 A =[12、16、22、30、35、39、42、45、48、50、53、55、56]およびX =35、k =4の場合、出力は30、39、42、45になります。 。 これを解決するために、二分探索アプローチを使用します。これを使用して、クロスオーバーポイントを取得します。クロスオーバーポイントのインデックスが見つかった場合、O(k)時間でk個の最も近い要素を出力できます。 例 #include<i
-
C++で原点に最も近いK点を見つける
一連のポイントがあるとします。私たちの仕事は、原点に最も近いK点を見つけることです。ポイントが(3、3)、(5、-1)、(-2、4)であるとします。次に、最も近い2つの(K =2)ポイントは(3、3)、(-2、4)です。 この問題を解決するために、ユークリッド距離に基づいてポイントのリストを並べ替えます。その後、並べ替えられたリストから最上位のK要素を取得します。これらはK最近傍点です。 例 #include<iostream> #include<algorithm> using namespace std; class Point{ pri