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

C++で最大K個のスワップを実行して可能な最大数を見つけます


この問題では、2つの整数値nとkが与えられます。私たちのタスクは、最大でK個のスワップを実行することによって可能な最大数を見つけることです。

問題の説明: ここでは、最大で数の最大k桁を交換した後に作成される数を計算する必要があります。

問題を理解するために例を見てみましょう。

入力: n =538 k =1

出力: 835

説明:

8と5を交換します。

ソリューションアプローチ

この問題を解決するには、数の桁をk回交換し、からの数が最大かどうかを確認する必要があります。

数値の最大桁を見つけて、最初のインデックスで要素を交換する必要があります。数字の最初のk個のインデックスについても同様です。

ソリューションの動作を説明するプログラム

#include <bits/stdc++.h>
using namespace std;

void calcMaxNumAfterSwap(string number, int k, string& maxString, int n){
   
   if (k == 0)
      return;
   for (int i = 0; i < n - 1; i++) {
      for (int j = i + 1; j < n; j++) {
         if (number[i] < number[j]) {
            swap(number[i], number[j]);
            if (number.compare(maxString) > 0)
               maxString = number;
            calcMaxNumAfterSwap(number, k - 1, maxString, n);
            swap(number[i], number[j]);
         }
      }
   }
}

int main(){
   
   string str = "15263";
   int k = 3;
   int size = str.length();
   string maxString = str;
   calcMaxNumAfterSwap(str, k, maxString, size);
   cout<<"The maximum number created after "<<k<<" swaps is "<<maxString;

   return 0;
}

出力

The maximum number created after 3 swaps is 65321

  1. C++での最大積4倍の数を見つける

    n個の要素を持つ1つの整数配列があるとします。配列内の4倍の最大積を見つける必要があります。したがって、配列が[3、5、20、6、10]のような場合、最終積は6000であり、4倍の要素は10、5、6、20です。 これを解決するには、次の手順に従います- 配列を昇順で並べ替えます xが最後の4つの要素の積、yが最初の4つの要素の積、zが最初の2つと次の2つの要素の積であると仮定します x、y、zの最大値を返します。 例 #include<iostream> #include<algorithm> using namespace std; int maxQuadP

  2. エッジのばらばらのパスの最大数を見つけるためのC++プログラム

    これは、エッジの互いに素なパスの最大数を見つけるためのC ++プログラムです。これは、2つの頂点間の最短のサブセットパスまたは最大フローを意味します。 アルゴリズム: Begin    function bfs() returns true if there is path from source s to sink t in    the residual graph which indicates additional possible flow in the    graph. End Begin    fu