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