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

数値cおよびdを作成するための最小演算を見つけるためのC++コード


2つの数cとdがあるとします。 Amalには2つの数値aとbがあり、最初は両方ともゼロです。Amalはそれらに対して何らかの操作を実行したいと考えています。各操作を実行する前に、正の整数kが選択され、次の操作のいずれかを実行するために使用されます-

  • aとbの両方に数kを追加する、または

  • 数kをaに加算し、bからkを減算する、または

  • 数kをbに加算し、aからkを減算します。

aとbをそれぞれcと等しくするために必要な操作の最小数を見つける必要があります。不可能な場合は、-1を返します。

したがって、入力がc=3のような場合。 d =5の場合、出力は2になります。これは、k =1の場合、数値(1、1)が得られるため、k =8の場合、ペアは(-7、9)、k =7の場合、次のようになります。 (0、2)そしてk =3の場合、それは(3、5)

になります。

ステップ

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

if (c ^ d) is odd, then:
   return -1
otherwise when c is same as 0 and d is same as 0, then:
   return 0
otherwise when c is same as d, then:
   return 1
Otherwise
   return 2
>

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

#include <bits/stdc++.h>
using namespace std;
int solve(int c, int d){
   if ((c ^ d) & 1)
      return -1;
   else if (c == 0 && d == 0)
      return 0;
   else if (c == d)
      return 1;
   else
      return 2;
}
int main(){
   int c = 3;
   int d = 5;
   cout << solve(c, d) << endl;
}

入力

3, 5

出力

2

  1. C++ですべての1を左に、0を右に作成するための最小フリップ

    問題の説明 左側のすべての1と右側のすべての0を反転できるバイナリ文字列があるとします。タスクは、すべて1を左に、すべて0を右にするために必要な最小フリップを計算することです 例 与えられたバイナリ文字列は0010101です。この文字列には、3つの1ビットと4つの0ビットがあります。以下に示すように、ハイライトされた4ビットを反転して、すべて1を左に、すべて0を右にする必要があります- 0010101 文字列を反転した後は-になります 1110000 アルゴリズム 文字列を左から右にトラバースし、すべての0を1に変換するために必要なフリップの数を計算します。 文字列を右から左に

  2. 配列のGCDをC++でkの倍数にするための最小操作

    配列arrと別の値kがあるとします。配列のGCDをkの倍数に等しくするために、最小数の演算を見つける必要があります。この場合、操作は値を増減しています。配列が{4、5、6}のようで、kが5であるとします。4を1増やし、6を1減らすことができるので、5になります。ここでの演算数は2です。 結果を得るには、次の手順に従う必要があります- 手順 − 配列内のすべての要素eについて、手順2と3に従います kの場合、結果を(e mod k)と(k – e mod k)の最小値として増やします。 それ以外の場合、結果は結果+ k – eになります 結果を返す 例 #include <io