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

C++에서 숫자에 k 중단점을 넣은 후 최대 세그먼트 값


이 문제에서 큰 수를 나타내는 문자열이 주어지고 정수 k roar는 중단점 수를 나타냅니다. 우리의 임무는 L개의 중단점을 숫자에 넣은 후 최대 세그먼트 값을 찾는 프로그램을 만드는 것입니다.

여기서 우리는 문자열로 주어진 숫자에 k개의 breakpoint를 넣은 후 생성될 수 있는 최대 숫자를 찾아야 합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 - 문자열 ="45972", k =3

출력 − 97

설명 -

All possible number is:
45    9    7    2
4    59    7    2
4    5    97    2
4    5    9    72
From all 97 is the largest number.

이 문제를 해결하기 위해 슬라이딩 창을 사용합니다. 여기서 창 크기는 (문자열 길이 - k), 즉 이 크기의 최대 수입니다. 슬라이딩 윈도우 기법을 사용하여 주어진 크기의 가능한 모든 수에서 최대 수를 확인할 것입니다.

예시

숫자에 K개의 중단점을 넣은 후 최대 세그먼트 값을 찾는 프로그램 -

#include <bits/stdc++.h>
using namespace std;
int findMaxSegmentWithKbreaks(string &s, int k) {
   int window = s.length() - k;
   int MaxNumber = 0;
   for (int i=0; i<window; i++)
   MaxNumber = MaxNumber * 10 + (s[i] - '0');
   int slWindow = pow(10, window-1);
   int value = MaxNumber;
   for (int i = 1; i <= (s.length() - window); i++) {
      value = value - (s[i-1]- '0')*slWindow;
      value = value*10 + (s[i+window-1]- '0');
      MaxNumber = max(MaxNumber, value);
   }
   return MaxNumber;
}
int main() {
   string s = "45972";
   int k = 3;
   cout<<"Maximum segment value after putting "<<k<<" break points in a number = "<<findMaxSegmentWithKbreaks(s, k);
   return 0;
}

출력

Maximum segment value after putting 3 breakpoints in a number = 97