第一行输入一个整数
,表示测试用例数量。
此后
行,每行输入一个不含前导零的数字字符串
,满足
。
保证所有测试用例的
之和不超过
。
对于每个测试用例,在一行上输出通过任意次数操作后能够得到的字典序最大的字符串。
6 19 1709 11555 51476 9876543210 5891917899
81 6710 33311 55431 9876543210 7875567711
以
为例:
![]()
![]()
![]()
;
![]()
![]()
![]()
,得到答案
。
再以
为例,可按如下序列操作:
![]()
![]()
![]()
;
![]()
![]()
![]()
;
![]()
![]()
![]()
,最终得到答案
。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.nextLine(); // 处理换行符
while (n-- > 0) {
// 读取字符串并转为整数数组
char[] chars = in.nextLine().toCharArray();
int[] s = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
s[i] = chars[i] - '0';
}
boolean flag = true;
// 循环执行操作直到无法继续
while (flag) {
flag = false;
// 从右向左执行一***作
for (int i = s.length - 1; i > 0; i--) {
// 满足差值≥2时交换并减1
if (s[i] - s[i - 1] >= 2) {
int tmp = s[i];
s[i] = s[i - 1];
s[i - 1] = tmp - 1;
}
}
// 检查是否还能操作
for (int i = s.length - 1; i > 0; i--) {
if (s[i] - s[i - 1] >= 2) {
flag = true;
break;
}
}
}
// 输出结果
for (int i : s) {
System.out.print(i);
}
System.out.println();
}
}
} n = int(input()) for _ in range(n): st = list(map(int, input())) while True: for i in range(1, len(st)): if st[i] - st[i - 1] >= 2: tmp = st[i] st[i] = st[i - 1] st[i - 1] = tmp - 1 if all(st[i] -st[i-1]<2 for i in range(1, len(st))): break print(''.join(map(str, st)))
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
const t = Number(await readline());
const cases = Array(t);
for (let i = 0; i < t; i++) {
let s = await readline();
let arr = s.split('').map(Number);
const n = arr.length;
// console.log(arr)
while (true) {
let stop = true;
for (let i = n-1; i > 0; i--) {
if (arr[i-1] < arr[i] - 1) {
arr[i]--;
[arr[i-1], arr[i]] = [arr[i], arr[i-1]];
stop = false;
}
}
if (stop) {
break;
}
}
console.log(arr.join(''));
}
}()
package main
import (
"fmt"
)
func Min(a, b int) int{
if a < b{
return a
}
return b
}
func main() {
var t, length, max_id int
var s string
fmt.Scanf("%d", &t)
for t > 0{
t--
fmt.Scanf("%s", &s)
b := []byte(s)
length = len(b)
for i:=0;i<length;i++{
if b[i] > '7'{ // '8'和'9'不需要操作
continue
}
max_id = i
for j:=i+1;j<=Min(length-1, i+8);j++{
if b[j]-byte(j-i) > b[max_id]-byte(max_id-i){ // 差值
max_id = j
}
}
if max_id > i{
for max_id >i {
b[max_id], b[max_id-1] = b[max_id-1],b[max_id]-1
max_id--
}
}
}
fmt.Println(string(b))
}
}