解析:贪心,每次从后往前交换,都把最小的换到前面,记得第一位不可以为0。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int N = 1005; char str[N]; int main() { int T; int n; scanf("%d",&T); while(T--) { scanf("%s%d",str,&n); int len = strlen(str); int index ,cnt = 0; for(int i = 0; i < len; i++) { if(cnt >= n) { break; } int min = INF; for(int j = len - 1; j >= i; j--) { if(min > str[j] && (str[j] != '0' || i )) { min = str[j]; index = j; } } if (str[i] - str[index] > 0) { swap(str[i],str[index]); cnt++; } } printf("%s\n",str); } return 0; }