任务描述

本关任务:用递归算法找出 n(n>=3) 个自然数中取 3 个数的组合。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:5 (n=5;,表示从1,2,3,4,5自然数中选择 3 个数)

预期输出:

5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1

代码实现

package step2;
import java.util.Scanner;
public class Recursion{
   // 递归函数生成组合
    private static void findCombinations(int start, int n, int depth, int[] combination, int r) {
        // 当组合长度达到3时,打印当前组合
        if (depth == r) {
            for (int i = 0; i < r; i++) {
                System.out.print(combination[i] + " ");
            }
            System.out.println();
            return;
        }

        // 从当前开始位置选择数字,确保从大到小排列
        for (int i = start; i >= 1; i--) {
            combination[depth] = i;
            findCombinations(i - 1, n, depth + 1, combination, r);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();  // 读取输入的n值
        scanner.close();
        // 确保n的值符合要求
        if (n < 3) {
            System.out.println("n 应该大于等于3.");
            return;
        }
        int[] combination = new int[3];  // 存储组合的数组
        // 从n开始递归生成组合
        findCombinations(n, n, 0, combination, 3);
    }  
}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部