题解 | #数组分组#
数组分组
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; } }