Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 하나의 스왑 작업만 사용하여 가능한 가장 큰 작은 수

<시간/>

이 튜토리얼에서는 주어진 숫자 n보다 작은 단일 스왑으로 가장 큰 숫자를 찾는 프로그램을 작성할 것입니다.

문제를 해결하는 단계를 살펴보겠습니다.

  • 숫자 n을 초기화합니다.
  • 문자열 끝에서 반복하고 다음 숫자보다 큰 숫자의 인덱스를 찾습니다. 변수에 저장합니다.
  • 찾는 즉시 루프를 끊으세요.
  • 문자열 끝에서 위의 인덱스까지 숫자를 반복합니다.
    • 위의 색인된 숫자보다 작고 영역의 모든 숫자 중에서 큰 숫자의 색인을 찾습니다.
  • 위의 두 인덱스에서 숫자를 바꿉니다. 업데이트된 숫자를 반환합니다.

코드를 봅시다.

#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

결론

튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.