寻找最大数(三)

来源:互联网 发布:mac粉底液怎么样 编辑:程序博客网 时间:2024/04/29 03:36

描述
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。

求这个新的整数的最大值是多少。

输入多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).输出每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。样例输入1990 1
100 0
9090000078001234 6
样例输出9190
100
9907000008001234

思路:使用贪心算法,将在部分范围内,让最大的数放在最左面,使整个数字的值变的最大。

#include<stdio.h>#include<string.h>#include<algorithm>int main(void){    char c[20] = "0";    int N = 0;    while (scanf("%s%d",c, &N) != EOF)    {        int len = strlen(c);        int t = 0;        int i = 0;        while (i<len&&N>0)        {            int j = 0;            t = i;            for (j = i + 1; j <= i + N&&j<len; j++)//重中之重,控制j在数组中的范围,我被            //这个点快气死了            {                if (c[j]>c[t])                    t = j;            }            int k = 0;            for (k = t; k>i; k--)            {                std::swap(c[k],c[k-1]);            }            N = N - (t - i);            i++;        }        printf("%s\n",c);    }    return 0;}
0 0