201301 JAVA题目0-1级

题目描述

编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。 

输入描述:

第一行是数据个数,第二行是输入的数据

输出描述:

返回true或者false

输入例子:
4
1 5 -5 1
输出例子:
true

 1 import java.util.*;
 2  
 3 public class Main46 {  
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6         while(sc.hasNext()){
 7             int n = sc.nextInt();
 8             int sum1 = 0, sum2 = 0;
 9             int[] a = new int[n];
10             int count = 0;
11             for(int i =0;i<n;i++){
12                 int tmp = sc.nextInt();
13                 if(tmp%5==0){
14                     sum1+=tmp;
15                 }
16                 else if(tmp%3==0)
17                     sum2 += tmp;
18                 else{
19                     a[count++] = tmp;
20                 }
21             }
22             int sum = Math.abs(sum1-sum2);//这里只考虑绝对值就可以了
23             System.out.println(f(0,count,a,0,sum));
24         }
25     }
26  
27     public static boolean f(int i ,int n,int[] a,int result,int sum){
28         if(i==n){
29             return Math.abs(result) == sum;//绝对值相等就可以
30         }
31         else{
32             return (f(i+1,n,a,result+a[i],sum)||f(i+1,n,a,result-a[i],sum));
33         }
34     }
35 }

后边这个递归函数,想不到啊,有人说这是ksum问题,有空可以研究一下。

posted @ 2016-08-16 23:05  蛋蛋的守护  阅读(359)  评论(0)    收藏  举报