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

C ++でAの数字の一部をBの数字に置き換えることにより、Aの値を最大化します。


タスクは、数字の一部を別の数字Bに存在する数字に置き換えることにより、数字Aの値を最大化することです。Aの値を最大化できない場合、数字は置き換えられません。

>

−Bの数字は1回しか使用できません。

例を使用して、私たちがしなければならないことを理解しましょう-

入力

A = “1221”
B = “1211”

出力

Maximum value of A possible 2221

説明 −ここでは、Bから2を選択し、それをAの最初の1に置き換えます。ここでは、Aの他の数字を2または1に置き換えても、その値が増加しないため、これが唯一の選択肢です。

入力

A = “1002”
B = “3200”

出力

Maximum value of A possible 3202

以下のプログラムで使用されるアプローチは次のとおりです

  • Aの各桁は、Bの桁よりも小さい場合、Bの桁に置き換えられます。

  • 文字列Bを昇順で並べ替えます。

  • 左からAのトラバースを開始します。

  • 次に、Bを右からトラバースします。

  • Aの数字が小さい場合は、Aの数字をBの数字に置き換え、Aでポインターをインクリメントし、Bでポインターをデクリメントします。

#include <bits/stdc++.h>
using namespace std;
// Function to return the maximized value of a
string valueup(string str1, string str2){
   // Sort digits in ascending order
   sort(str2.begin(), str2.end());
   int len1 = str1.length();
   int len2 = str2.length();
   int j = len2 - 1;
   for (int i = 0; i < len1; i++) {
      // If all the digits of b consumed
      if (j < 0)
         break;
      if (str2[j] > str1[i]) {
         str1[i] = str2[j];
         j--; //once digit used
      }
   }
   return str1;
}
// Driver code
int main(){
   string a = "1204";
   string b = "4521";
   cout << valueup(a, b);
   return 0;
}

出力

上記のコードを実行すると、次の出力が得られます-

5424

  1. C++の二分探索木で最小値のノードを見つけます

    1つの二分探索木があるとします。二分探索木で最小要素を見つける必要があります。したがって、BSTが以下のような場合- 最小要素は1になります。 左のサブツリーは常に小さい要素を保持していることがわかっています。したがって、左がnullになるまで左のサブツリーを何度もトラバースすると、最小の要素を見つけることができます。 例 #include<iostream> using namespace std; class node{    public:       node *left;      

  2. 与えられた数がC++でその桁の階乗の合計を除算するかどうかを確認します

    整数があるとすると、その数がその桁の階乗の合計を除算するかどうかを調べる必要があります。数値が19で、桁の階乗の合計が(1!+ 9!)=362881であるとすると、これは19で割り切れます。 これを解決するために、数値を取得し、各桁の階乗を計算して合計を加算します。合計が数値自体で割り切れる場合はtrueを返し、そうでない場合はfalseを返します。 例 #include <iostream> using namespace std; int factorial(int n){    if(n == 1 || n == 0)     &nb