题目描述
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
输入
多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).
输出
每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。
样例输入
1990 1
100 0
9090000078001234 6
样例输出
9190
100
9907000008001234
1 #include<stdio.h> 2 #include<string.h> 3 4 #define MAX 20 5 6 int main(void) { 7 char num[MAX]; 8 int k; 9 while(scanf("%s %d",num, &k)!=EOF) { 10 int i, j; 11 int len = strlen(num); 12 char temp;//temp:临时 13 int flag;//flag:信号 14 int mark;//mark:标记 15 for(i = 0; i < len; i ++) { 16 temp = num[i]; 17 flag = 1; 18 for(j = i + 1; j <= i + k && j < len; j++) {//在k范围内的最大数,并记录其下标。用以下面for循坏的次数 19 if(num[j] > temp) { 20 temp = num[j]; 21 mark = j;//记录范围内最大值的下标 22 flag = 0; 23 } 24 } 25 if(!flag) { 26 for(int s = mark; s > i; s --) { 27 temp = num[s]; 28 num[s] = num[s - 1]; 29 num[s - 1] = temp; 30 } 31 k = k -(mark - i);//mark - i即为k要减少的数 32 } 33 if(k == 0) {//移动结束条件 34 break; 35 } 36 } 37 puts(num); 38 } 39 return 0; 40 }