在 C++ 中,在数字中插入 k 个断点后最大段的值


在这个问题中,我们得到一个表示大数的字符串和一个整数 k,它表示断点的数量。我们的任务是编写一个程序,找到在数字中插入 L 个断点后的最大段值。

在这里,我们必须找到在给定字符串表示的数字中插入 k 个断点后可以生成的 最大数字。

让我们来看一个例子来理解这个问题

输入 − 字符串 = “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

更新于:2020-06-03

203 次浏览

开启您的 职业生涯

完成课程获得认证

开始学习
广告