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

C++で1つのスワップ操作のみを使用して可能な最大の小さい数


このチュートリアルでは、指定された数n未満の1回のスワップで最大数を見つけるプログラムを作成します。

問題を解決するための手順を見てみましょう。

  • 番号nを初期化します。
  • 文字列の末尾から繰り返して、次の桁よりも大きい桁のインデックスを見つけます。変数に保存します。
  • ループを見つけたらすぐに中断します。
  • 文字列の末尾から上記のインデックスまでの数値を繰り返し処理します。
    • 上記のインデックス付きの数字よりも少なく、エリア内のすべての中で大きい数字のインデックスを見つけます。
  • 上記の2つのインデックスの数字を入れ替えます。更新された番号を返します。

コードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
string getTheNumber(string str) {
   int length = str.length();
   int index = -1;
   for (int i = length - 2; i >= 0; i--) {
      if (str[i] > str[i+1]) {
         index = i;
         break;
      }
   }
   int smallerDigitIndex = -1;
   for (int i = length - 1; i > index; i--) {
      if (str[i] < str[index]) {
         if (smallerDigitIndex == -1 || str[i] >= str[smallerDigitIndex]) {
            smallerDigitIndex = i;
         }
      }
   }
   if (index == -1) {
      return "-1";
   }
   if (smallerDigitIndex != -1) {
      swap(str[index], str[smallerDigitIndex]);
      return str;
   }
   return "-1";
}
int main() {
   string str = "54624";
   cout << getTheNumber(str) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

54426

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C ++を使用して、他の文字列に存在する1つの文字列の部分文字列の数を検索します

    この記事では、2つの文字列が与えられ、2番目の文字列で1番目の文字列のサブ文字列がいくつ見つかるかを調べる必要があります(正確なサブ文字列は複数回発生する可能性があります)。例 Input : string1 = “fogl”    string2 = “google” Output : 6 Explanation : substrings of string1 present in string2 are [ “o”, “g”, “l”, “

  2. C ++を使用して、指定されたポイントから可能な四辺形の数を見つけます

    四辺形は、ユークリッド平面幾何学で4つの頂点と4つのエッジを持つポリゴンを形成します。名前4-gonなど。四辺形の他の名前に含まれ、正方形、表示スタイルなどとしても知られています。 この記事では、与えられた点から可能な四辺形の数を見つけるためのアプローチを説明します。この問題では、デカルト平面に提供された4つの点(x、y)を使用して作成できる四辺形の数を調べる必要があります。だからここに与えられた問題の例があります- Input : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) Output : 1 Explanation : One quadr