问题 O: 寻找最大数(三)

[提交][状态][讨论版]

题目描述

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

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

输入

多组测试数据。
每组测试数据占一行,每行有两个数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 }
View Code

 

posted on 2016-08-22 18:15  椿和湫  阅读(301)  评论(0编辑  收藏  举报

导航