题解 | #数组分组#

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

import java.util.Scanner;
//递归
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int num = in.nextInt();
        int[] nums = new int[num];
        int sum=0;
        for(int i=0 ; i<num ; ++i){
            nums[i] = in.nextInt();
            sum+=nums[i];
        }
        System.out.println(dfs(nums, 0, 0, sum));
    }

    public static boolean dfs(int[] nums, int curSum, int pos, int sum){
        if(pos == nums.length){  //递归终止限制
            if(sum == curSum<<1) {   //如果放在模5数组中的值等于放在另一个数组的值,则返回true
                //System.out.println(curSum);
                return true;
                
            }
            else return false;
        }
        boolean flag;  
        if(nums[pos]%5 == 0){   //如果模5,只能放进来
            flag = dfs(nums, curSum+nums[pos], pos+1, sum);
            
        }
        else if(nums[pos]%5!=0 && nums[pos]%3 == 0){ //如果不能模5,并且可以模3,不能放进来
            flag = dfs(nums, curSum, pos+1, sum);
        }
        else{ //其他数字可方可不放
            flag = dfs(nums, curSum, pos+1, sum) | dfs(nums, curSum+nums[pos], pos+1, sum);
        }
        return flag; 
    }
}

全部评论

相关推荐

09-21 23:16
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务