5 条题解

  • 0
    @ 2024-4-10 21:18:54
    import java.util.*;
    
    public class Main {
    	public static boolean flag[];// 标记第i个元素是否被使用过
    	public static int n;
    	public static int road[];
    
    	//用来检查是否是正序的
    	public static boolean check(int road[], int total) {
    		boolean natural = true;
    		for (int i = 1; i < total; i++) {
    			if (road[i] > road[i + 1])
    				natural = false;
    		}
    		return natural;
    	}
    
    	// idx 选择第几个数了
    	// 选取元素总数
    	public static void dfs(int idx, int num[], int total) {
    		if (idx > total) {
    			if (check(road,total)) {
    				for (int i = 1; i <= total; i++) {
    					System.out.print(road[i] + " ");
    				}
    				System.out.println();
    			}
    			return;
    		}
    		for (int i = idx ; i <= n; i++) {
    			if (!flag[i]) {
    				road[idx] = num[i];
    				flag[i] = true;
    				dfs(idx + 1, num, total);
    				flag[i] = false;
    			}
    		}
    		return;
    	}
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		n = sc.nextInt();
    		int r = sc.nextInt();
    
    		flag = new boolean[n + 5];
    		int num[] = new int[n + 5];
    		road = new int[n + 5];
    		for (int i = 1; i <= n; i++) {
    			num[i] = sc.nextInt();
    		}
    //		fromIndex 是排序开始的位置(包含),toIndex 是排序结束的位置(不包含)。
    //		这意味着 Arrays.sort(a, fromIndex, toIndex) 将对数组 a 从索引 fromIndex 到 toIndex - 1 的范围进行排序。
    		Arrays.sort(num, 1, n+1);
    		sc.close();
    		dfs(1, num, r);
    	}
    }
    

    信息

    ID
    83
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    378
    已通过
    143
    上传者