描述: | 编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。
|
知识点: | 语言基础,字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归 |
题目来源: | 内部整理 |
练习阶段: | 初级 |
运行时间限制: | 10Sec |
内存限制: | 128MByte |
输入: |
输入输入的数据个数 输入一个int型数组 |
输出: |
返回true或者false |
样例输入: | 4 1 5 -5 1 |
样例输出: | true |
答案提示: |
|
源代码:
package issplittwointarray; import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int arrayLength = sc.nextInt(); int[] intArray = new int[arrayLength]; for(int i = 0; i < intArray.length; i++){ intArray[i] = sc.nextInt(); } boolean isSplitTwoEqualArrays = Main.isSplitTwoEqualArray(intArray); System.out.println(isSplitTwoEqualArrays); } public static boolean isSplitTwoEqualArray(int[] intArray){ int multipleOfFiveSum = 0; int multipleOfThreeSum = 0; ArrayList<Integer> otherInts = new ArrayList<Integer>(); for(int i = 0; i < intArray.length; i++){ if(intArray[i] % 5 == 0){ multipleOfFiveSum += intArray[i]; } else if(intArray[i] % 3 == 0){ multipleOfThreeSum += intArray[i]; } else { otherInts.add(intArray[i]); } } int difference = multipleOfFiveSum - multipleOfThreeSum; ArrayList<Integer> accumulationSum = new ArrayList<Integer>(); accumulationSum.add(0); for (Integer otherInt : otherInts) { accumulationSum = Main.expressionsAccumulation(accumulationSum, otherInt); } for (Integer sum : accumulationSum) { if((sum == difference) || (sum == difference * (-1))) return true; } return false; } public static ArrayList<Integer> expressionsAccumulation(ArrayList<Integer> preSums, int extraInt){ ArrayList<Integer> accumulationSum = new ArrayList<Integer>(); for (Integer preSum : preSums) { accumulationSum.add(preSum + extraInt); accumulationSum.add(preSum - extraInt); } return accumulationSum; } }
本文出自 “乱七八糟存放点” 博客,请务必保留此出处http://541777359.blog.51cto.com/5408989/1533972
【华为OJ】201301 JAVA 题目0-1级 将数组分为相等的两组,布布扣,bubuko.com
【华为OJ】201301 JAVA 题目0-1级 将数组分为相等的两组
原文:http://541777359.blog.51cto.com/5408989/1533972