文章目录
- 题目描述
- 输入
- 输出
- 样例输入
- 样例输入1
- 样例输入2
- 样例输入3
- 样例输出
- 样例输出1
- 样例输出2
- 样例输出3
- AC代码
题目描述
小明已经是中学生了,他喜欢研究数字,觉得最漂亮的数就是整数了。一次小明写下一个M位的整数(无前导0),他想研究下面这个游戏:每次取其中两位交换,会得到一个新的整数------但不能有前导0出现,即第一位不能变成0。这样连续做K次,最后能得到的最大整数是多少?
输入
第一行:两个整数N(1<=N<=1000000)和K(1<=K<=10)
输出
只有一行,一个整数,表示变化后最大数,如果不能变换则输出-1
样例输入
样例输入1
16375 1
样例输入2
432 1
样例输入3
90 4
样例输出
样例输出1
76315
样例输出2
423
样例输出3
-1
AC代码
#include <stdio.h>
#include <algorithm>
#include <string.h>int n, k, vis[1000005][12], ans = -1;
void dfs(int deep, int val, int cur)
{if (deep == cur) // 递归边界{ans = std::max(ans, val);return ;}else{char fstr[12] = {0};sprintf(fstr, "%d", val);int Size = strlen(fstr);for (int i = 0; i < Size; i++)for (int j = i + 1; j < Size; j++){char tstr[12] = {0};strcpy(tstr, fstr);std::swap(tstr[i], tstr[j]);if (tstr[0] == '0') continue;int p = atoi(tstr);if (!vis[p][cur]){vis[p][cur] = 1;dfs(deep, p, cur + 1);}}}
}
int main()
{scanf("%d%d", &n, &k);dfs(k, n, 0);printf("%d", ans);return 0;
}