打卡第一天 | 豆包MarsCode AI刷题

200 阅读1分钟

打卡第一天 | 豆包MarsCode AI刷题

Java训练第一题(原题):小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 解答+过程讲解:第一题答案(豆包):import java.util.ArrayList; import java.util.List;

public class Main { public static void main(String[] args) { // 示例输入 int[] numbers = {123, 456, 789};

    // 调用解决方案函数
    int result = solution(numbers);
    
    // 输出结果
    System.out.println(result);
}

public static int solution(int[] numbers) {
    // 初始化计数器
    int count = 0;
    
    // 生成所有可能的组合
    List<String> combinations = generateCombinations(numbers);
    
    // 遍历所有组合
    for (String combination : combinations) {
        // 计算组合的各位数字之和
        int totalSum = 0;
        for (char digit : combination.toCharArray()) {
            totalSum += Character.getNumericValue(digit);
        }
        
        // 判断和是否为偶数
        if (totalSum % 2 == 0) {
            count++;
        }
    }
    
    return count;
}

public static List<String> generateCombinations(int[] numbers) {
    List<String> combinations = new ArrayList<>();
    generateCombinationsHelper(numbers, 0, "", combinations);
    return combinations;
}

private static void generateCombinationsHelper(int[] numbers, int index, String current, List<String> combinations) {
    if (index == numbers.length) {
        combinations.add(current);
        return;
    }
    
    String group = String.valueOf(numbers[index]);
    for (char digit : group.toCharArray()) {
        generateCombinationsHelper(numbers, index + 1, current + digit, combinations);
    }
}

}