华为OD机试-组装新的数组-2022Q4 A卷-Py/Java/JS

题目:

给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则:
1.R中元素总和加起来等于M
2.R中的元素可以从N中重复选取
3.R中的元素最多只能有1个不在N中,且比N中的数字都要小(不能为负数)
输入描述
第一行输入是连续数组N,采用空格分隔第二行输入数字M
输出描述
输出的是组装办法数量,int类型

备注
1≤M≤30
1 ≤ N.length ≤ 1000


示例1
输入
2
5

输出

1

说明
只有1种组装办法,就是[2,2,1]

示例2
输入
2 3
5
输出
2

说明
共两种组装办法,分别是[2,2,1],[2,3]

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
import java.util.stream.Stream;
 
class Main {
    public static int m;
    public static int min_num;
	public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Integer[] nums = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
        m = in.nextInt();
 
        Arrays.sort(nums);
        min_num = nums[0];
 
        System.out.println(dfs(nums, 0, 0, 0));
	}
 
    public static int dfs(Integer[] nums, int index, int sum, int count) {
        if (sum > m) {
            return count;
        }
 
        if (sum <= m && m - min_num < sum) {
            return count + 1;
        }
    
        for (int i = index; i < nums.length; i++) {
            count = dfs(nums, i, sum + nums[i], count);
        }
    
        return count;
    }
 
}

Python代码

import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
 
 
nums = [int(x) for x in input().split(" ")]
m = int(input())
nums = sorted(nums)
min_num = nums[0]
        
def dfs(nums, index, num_sum, count):
        if (num_sum > m):
            return count
        if (num_sum <= m and m - min_num < num_sum):
            return count + 1
    
        for i in range(index, len(nums)):
            count = dfs(nums, i, num_sum + nums[i], count)
    
        return count
 
print(dfs(nums, 0, 0, 0))

JS代码

 function dfs(nums, index, num_sum, count,min_num,m){
    if (num_sum > m)
        return count
    if (num_sum <= m && m - min_num < num_sum)
        return count + 1
 
    for (let i=index;i

你可能感兴趣的:(java,JavaScript,华为)