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

C++での整数置換


正の整数nがあり、次のようにこれらの操作を実行できるとします-

  • nが偶数の場合は、nをn/2に置き換えます。

  • nが奇数の場合、nをn+1またはn-1に置き換えることができます。

nが1になるために必要な置換の最小数を見つける必要がありますか?

したがって、数字が7の場合、答えは4になります。7→8→4→2→1または7→6→3→2→1

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

  • ret:=0、n:=x

  • n> 1

    • nが偶数の場合、c:=n / 2

    • それ以外の場合、nが偶数の場合

      • nが3またはn/2が偶数の場合、nを1減らし、それ以外の場合はnを1増やします

    • retを1増やします

  • retを返します。

例(C ++)

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

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
   public:
   int bitCount(int x){
      int ret = 0;
      while(x){
         ret++;
         x >>= 1;
      }
      return ret;
   }
   int integerReplacement(int x) {
      int ret = 0;
      lli n = x;
      while(n > 1){
         if(n % 2 == 0){
            n >>= 1;
         }
         else if(n & 1){
            if(n == 3 || (((n >> 1) & 1 )== 0)){
               n--;
            } else {
               n++;
            }
         }
         ret++;
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.integerReplacement(7));
}

入力

7

出力

4

  1. C++での符号なし整数の除算アルゴリズムの復元

    除算アルゴリズムを使用して符号なし整数を除算する方法について説明します。一部の除算アルゴリズムは紙に適用され、その他はデジタル回路に実装されます。除算アルゴリズムには、低速除算アルゴリズムと高速除算アルゴリズムの2種類があります。低速除算アルゴリズムには、復元、非実行復元、SRT、および非復元アルゴリズムが含まれます。 このチュートリアルでは、0<除数<被除数を想定した復元アルゴリズムについて説明します。 解決策を見つけるためのアプローチ ここでは、レジスタQを使用して商を格納し、レジスタAを使用して剰余を格納し、Mを使用して除数を格納します。 Aの初期値は0に保たれ、その値が復元されます

  2. 整数の数字をズームするC++プログラム

    このプログラムでは、C++で整数の数字をズームする方法を説明します。ズームとは、他の文字を使用して数字をより大きな形式で印刷することを意味します。ロジックは単純ですが、0から9まで1つずつ大きな数字を作成する必要があります。 サンプルコード #include <bits/stdc++.h> using namespace std; void print_zero() {    for (int i=0; i<5; i++) {       for (int j=0; j<5; j++) {     &