C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. 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

  2. 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