nyoj1057寻找最大数3

来源:互联网 发布:知豆汽车能开几年 编辑:程序博客网 时间:2024/04/30 01:01

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1057
或者:http://115.159.40.116/problem_show.php?pid=5608

寻找最大数(三)

描述

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

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

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

再提供一些测试数据:
26412 20
4321 6
1234 10
1695679945 4
55998613859220091 8
195300690839678 42
9278750186997489 62
1055669685993329 93

答案

64221
4321
4321
9651679945
99865513859220091
999887153006036
9999888777654201

每次移动两个相邻的数字,让我联想到了冒泡排序,于是便用了冒泡法。
AC代码:

#include <stdio.h>#include <string.h>int main() {char s[20];int k;while(~scanf("%s%d",s , &k)) {int len = strlen(s), j, x = 0;while(k > 0 && x < len) {j = (len-1)<(k+x)?(len-1):(k+x);int max = 0, w = x, a;for(a = x; a <= j; a++) {if(max < s[a]) {max = s[a];w = a;}}for(j = w; j-1 >= x && k > 0; j--) {if(s[j] > s[j-1]) {//写完后看别人代码,听说这个叫贪心交换char t = s[j];s[j] = s[j-1];s[j-1] = t;k--;}}x++;}puts(s);}return 0;}



0 0
原创粉丝点击