次の手法を使用して、X を乗算するか、その数値を 1 から N まで右回転する最も安価な方法を見つけることができます。初期の最小コストを監視するには、コスト変数を作成します。 N から 1 に移行する場合、各段階で N が X で割り切れるかどうかを確認します。そうであれば、N を X で割って更新し、プロセスを続行します。 N が X で割り切れない場合は、N の桁を右にループして値を増やします。この場合、コスト変数を追加します。最終的なコスト変数の値は、1 を N に変えるために必要な最小量になります。このアルゴリズムは、数値の回転または乗算を使用して、目的の変換を実行するために必要な最小限の演算を効率的に決定します。
素朴なアプローチ: 数値の右ローテーション
効率的な方法: X
素朴なアプローチは、数字 1 から始めて、目標の数字 N に達するまでその数字を右に繰り返し回転させることです。スピンするたびに、最後の数字が最初の数字に変わります。概念的には単純ですが、この戦略は N の値が大きい場合には非効率になる可能性があり、目標数値に到達するまでに多くの手順が必要になる場合があります。 N が増加すると、回転数も急激に増加するため、1 を N に変換する最小コストを決定する方法としてはあまり効果的ではなくなります。この方法は非効率であるため、N の値が大きい場合には推奨されません。一方、N を X で割るなどの他の方法は、変換の最低コストを見つけるのにより効率的であることが証明されています。
###アルゴリズム###
現在の数値の桁を右に回転して、最後の桁が最初の桁になるようにします。
「コスト」変数を 1 ずつ増分して、必要な回転数を記録します。
###例### リーリー ###出力### リーリー
N が 1 より大きい限り、手順 4 ~ 6 を繰り返します。
N% X == 0 と仮定して、N が X で割り切れるかどうかを判断します。
N が割り切れる場合 (N = N / X)、N を X で割り、「コスト」変数に 1 を加えます。
割り切れない場合は、N 個の数値を右にループし (最後の桁を最初の桁に移動して)、「コスト」を 1 ずつ増やします。
手順 3 ~ 6 を N が 1 になるまで繰り返します。
最後の「コスト」は、X を乗算するか、数値を右にシフトして 1 を N に変更するために必要な最小値を表します。
要約すると、X を掛けるか数値を右回転して 1 を N に変換する最小コストを決定する場合、次の効果的な掛け算方法が最適になります。効率的な方法によって提供されるより合理化されたアプローチでは、必要な N 数に到達するために必要なステップが少なくなります。一方で、単純な方法は、特に N の値が大きい場合、非効率的で時間がかかる可能性があります。必要なプロセスを削減し、効率的な方法を使用して、1 を N に変換する最も経済的な方法を決定できます。この戦略は、この変換プロセスの最小コストを決定する問題を解決し、より有用で効率的なアルゴリズムであることが証明されています。
以上が1 を N に変換する最小コスト。X を掛けるか数値を右回転することで達成できます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。