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

最初から最後まで移動するために必要な最小ステップ数を見つけるためのC++プログラム


座標(x、y)があるとします。 2Dグリッドでは、ロボットは(0、0)の位置にあり、(x、y)に到達したいと考えています。上、下、左、右に移動したり、現在のセルにとどまることができます。可能な限り最小限のコマンドで目的地に到達したいと考えています。必要なステップ数を数える必要があります。

したがって、入力がx=3のような場合。 y =4の場合、出力は7になります

ステップ

これを解決するには、次の手順に従います-

return x + y + minimum of |x - y|, |x - y + 1|, and |x - y - 1|

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;

int solve(int x, int y) {
   return x + y + min(abs(x - y), min(abs(x - y + 1), abs(x - y - 1)));
}
int main() {
   int x = 3;
   int y = 4;
   cout << solve(x, y) << endl;
}

入力

3, 4

出力

7

  1. C++で対戦相手を捕まえるために必要な最小ステップ数を見つけるためのプログラム

    [u、v]の形式のツリーエッジのリストがあると仮定します。これは、uとvの間に無向エッジがあることを示します。また、xとyの2つの値があります。ノードxにいて、対戦相手がノードyにいる場合。最初のラウンドでは移動し、次のラウンドでは対戦相手が移動します。対戦相手は、ラウンドで移動しないことを選択できます。対戦相手を捕まえるのに必要な最小ラウンド数を見つける必要があります。 したがって、入力がedges =[[0、1]、[0、2]、[1、3]、[1、4]]、x =0、y =3のような場合、出力は3になります。最初と同じように、ノード0から1に移動します。その後、対戦相手は現在のノード3に留まり

  2. C++で最大Nまでのログを計算するために必要なログ値の最小数を見つけます

    log(x * y)=log(x)+ log(y)であることがわかっています。したがって、1からNまでのすべてのログ値を計算するために必要なログ値の最小数を確認します。したがって、Nが6の場合、log(1)からlog(6)のように、出力は3になります。 log(1)を除いて、3つのログ値が必要です。 log(1)は常に0であるため、無視します。ここで、log(2)とlog(3)について、を見つける必要があります。その後、log(4)の場合はlog(2)+ log(2)になりますが、log(2)の値がわかっているため、これを再度計算することはありません。log(5)の場合は計算する必要があります