本文主要是介绍fzu 2111 Min Number(贪心),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:fzu 2111 Min Number
题目大意:给出一个数num,然后可以进行m次交换(即可以交换不同位数上的数),使得新的数越小。(0不能放在第一位)
解题思路:贪心,每次把最小的数字换到尽量前的位置,第一位特殊处理。
#include <stdio.h>
#include <string.h>const int N = 1005;int m;
char num[N];void swap(char& a, char& b) {char c = a;a = b;b = c;
}void solve() {int len = strlen(num);if (m == 0) return;int c = num[0] - '0', id = len;for (int j = len - 1; j; j--)if (num[j] - '0' < c && num[j] != '0') {id = j, c = num[j] - '0';}if (c != num[0] - '0') {swap(num[0], num[id]), m--;}for (int i = 1; i < len; i++) {if (m == 0) return;c = num[i] - '0';for (int j = len - 1; j > i; j--) {if (num[j] - '0' < c) {id = j, c = num[j] - '0';}}if (c != num[i] - '0') {swap(num[i], num[id]), m--;}}
}int main() {int cas;scanf("%d", &cas);while (cas--) {scanf("%s%d", num, &m);solve();printf("%s\n", num); }return 0;
}
这篇关于fzu 2111 Min Number(贪心)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!