C++实现最多K次交换后获得最大数字


在这个问题中,我们给定两个整数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

更新于:2021年1月27日

594 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.