codeforces 435B

题意:只能对相邻的两个数字进行交换,允许k次交换,输出交换能得到的最大的数。从最高位开始寻找最优,每次寻找能交换的步数里交换到的最大值进行交换。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char num[30];
int main() {
    int k;
    scanf("%s%d",num,&k);
    int len=strlen(num);
    for(int i=0;i<len;i++) {
        if(num[i]<'9') {
            char temp=num[i];
            int flag=i;
            for(int j=i+1;j<len && j<=i+k;j++) { //找出num[i+1]~num[i+k]中最大的 
                if(num[j]>temp) {
                    temp=num[j];
                    flag=j;
                }
            }
            if(flag!=i) {
                for(int j=flag-1;j>=i;j--) swap(num[j+1],num[j]);
          k
-=flag-i; } } } for(int i=0;i<len;i++) printf("%c",num[i]); printf(" "); return 0; }
原文地址:https://www.cnblogs.com/LinesYao/p/5709087.html