把 0~n-1 放到初始数组里面,按照题中队列操作输出后,逆下标映射即可:
import java.util.*; public class Main { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int i = 0; i < T; ++i){ int n = sc.nextInt(); List<Integer> v = new ArrayList<>(); for(int j = 0; j < n; ++j) v.add(j); List<Integer> r = new ArrayList<>(v); List<Integer> ans = g(v); for(int j = 0; j < n; ++j){ r.set(ans.get(j), j + 1); //逆下标映射 } f(r); } } static void f(List<Integer> v){ //打印输出 System.out.print(v.get(0)); for(int i = 1; i < v.size(); ++i){ System.out.print(" "); System.out.print(v.get(i)); } System.out.println(); } static List<Integer> g(List<Integer> v){ //题给的队列操作 List<Integer> ans = new ArrayList<>(); while(!v.isEmpty()){ int x = v.get(0); v.remove(0); v.add(x); x = v.get(0); ans.add(x); v.remove(0); } return ans; } }