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

C ++で指定された操作の最小数を使用して、数値mをnに変換します


このチュートリアルでは、与えられた演算の最小数を使用して、数値mをnに変換するプログラムについて説明します。

このために、2つの整数mとnが提供されます。私たちのタスクは、与えられた演算を最小回数使用して整数mをnに変換することです。

許可された操作-

  • 与えられた数に2を掛けます

  • 与えられた数から1を引く

#include <bits/stdc++.h>
using namespace std;
//finding minimum number of operations required
int convert(int m, int n){
   if (m == n)
      return 0;
   if (m > n)
   return m - n;
   //can't convert in this situation
   if (m <= 0 && n > 0)
      return -1;
   //when n is greater and n is odd
   if (n % 2 == 1)
   //performing '-1' on m
      return 1 + convert(m, n + 1);
   //when n is even
   else
   //performing '*2' on m
      return 1 + convert(m, n / 2);
}
int main(){
   int m = 5, n = 11;
   cout << "Minimum number of operations : " << convert(m, n);
   return 0;
}

出力

Minimum number of operations : 5

  1. C++でバイナリ行列をゼロ行列に変換するためのフリップの最小数

    mxnのバイナリ行列マットがあるとします。 1つのステップで、1つのセルを選択し、そのビットとその4つの隣接セルすべて(存在する場合)を反転できます。マットをゼロ行列に変換するために必要な最小ステップ数を見つける必要があります。解決策がない場合は、-1を返します。 したがって、指定された入力が[[0,0]、[0,1]]のような場合、変更は-のようになります。 したがって、3つのステップが必要で、出力は3になります。 これを解決するには、次の手順に従います- n:=行数、m:=列数、x:=0 iを初期化する場合:=0、i

  2. スタックを使用して10進数を2進数に変換するC++プログラム

    この問題では、スタックを使用して10進数を2進数に変換する方法を説明します。 10進数は、2で割って余りをとった後、2進数を使用して変換できることがわかっています。残りは最後から最初に取得するため、スタックデータ構造を使用して簡単に実行できます。 Input: Decimal number 13 Output: Binary number 1101 アルゴリズム Step 1: Take a number in decimal Step 2: while the number is greater than 0: Step 2.1: Push the remainder after divid