题解 | #数组分组#
数组分组
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;
}
}
查看8道真题和解析