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

C++を使用してバイナリ文字列Sに合計するために必要な操作の最小数。


問題の説明

与えられたバイナリ文字列str。 strで表される数を作成するために実行する必要のある操作の最小数を見つけます。以下の操作のみ実行可能-

  • 2 x を追加します
  • 2 x を引く

バイナリ文字列が「1000」の場合、実行する必要がある操作は1つだけです。つまり、2 3 を追加します。

バイナリ文字列が「101」の場合、2つの操作を実行する必要があります。つまり、2 2 を追加します。 + 2 0

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int getMinOperations(string s){
   reverse(s.begin(), s.end());
   int n = s.length();
   int result[n + 1][2];
   if (s[0] == '0') {
      result[0][0] = 0;
   } else {
      result[0][0] = 1;
   }
   result[0][1] = 1;
   for (int i = 1; i < n; ++i) {
      if (s[i] == '0') {
         result[i][0] = result[i - 1][0];
         result[i][1] = 1 + min(result[i - 1][1],
         result[i - 1][0]);
      } else {
         result[i][1] = result[i - 1][1];
         result[i][0] = 1 + min(result[i - 1][0],
         result[i - 1][1]);
      }
   }
   return result[n - 1][0];
}
int main(){
   string str = "101";
   cout << "Minimum required operations = " << getMinOperations(str) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum required operations = 2

  1. 敵を倒すために必要な操作の最小数を見つけるためのC++プログラム

    主人公がナイフを使って敵を倒すビデオゲームをプレイしているとします。主人公はナイフを使って敵を斬ったり、敵に向かって投げたりすることができます。主人公がナイフを投げた場合、それを再び取得することはできません。ナイフiによって与えられるダメージは、各要素が{slash、throw}の形式である配列knivesで与えられます。 「スラッシュ」とは、そのナイフで敵を斬ることによって敵に与えられるダメージを意味し、「投げる」とは、その特定のナイフを投げることによって敵に与えられるダメージを意味します。斬撃は無制限に行うことができますが、ナイフは一度しか投げることができません。さて、体力hの敵が現れます

  2. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &