寻找最大数 (区域内找最大值)

目录

题目描述

给出一个正整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的正整数。求这个新的正整数的最大值。
输入
输入一个正整数N和K,输出新的正整数。例如:N=1990,K=1,输出9190;N=101,K=0,输出101;N= 9090000078001234,K= 6,输出9907000008001234。
输出
输出新的数字

样例输入输出

样例输入

1990 1
101 0
9090000078001234 6

样例输出

9190
101
9907000008001234

代码详解

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char a[30];
    int k,m;
    while(~scanf("%s",a))
    {
        scanf("%d",&k);
        int s;
        for(int i=0; i<strlen(a)&&k>0 ; i++)
        {
            char b=a[i];
            // 在i..i+k区间内取最大值
            for(int j=i+1; j<=i+k&&j<strlen(a); j++)
            {   // a[j]-'0' 转化为数字进行比较
                if(a[j]-'0'>b-'0')
                {
                    b=a[j];
                    s=j;
                }
            }
            if(b!=a[i])
            {   // s-i表示需要走的步数 
                k-=s-i;
                for(int j=s; j>i; j--)
                {
                    swap(a[j],a[j-1]);
                }
            }
        }
        printf("%s\n",a);
    }
}

上一篇:矩阵快速幂 模板


下一篇:大前端React-01:React粗介绍-React是什么?传统的使用JavaScript,DOM交互痛点?React的优点?React前置知识