华为OJ 初级:201301 JAVA题目0-1级
2016-07-28 19:34
621 查看
描述 | 编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。 |
---|---|
知识点 | 字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入输入的数据个数 输入一个int型数组 |
输出 | 返回true或者false |
样例输入 | 4 1 5 -5 1 |
样例输出 | true |
import java.util.ArrayList; import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int length = scanner.nextInt(); int[] numbers = new int[length]; for (int i = 0; i < length; i++) { numbers[i] = scanner.nextInt(); } System.out.print(result(numbers)); scanner.close(); } private static boolean result(int[] numbers) { int numMultiple5 = 0; //所有5的倍数的数字的和 int numMultiple3 = 0; //所有3的倍数的数字的和 ArrayList<Integer> arrayList = new ArrayList<Integer>(); //存储不是3和5的倍数的数 for (int i = 0; i < numbers.length; i++) { if (numbers[i] % 5 == 0) numMultiple5 += numbers[i]; //所有5的倍数相加 else if (numbers[i] % 3 == 0 && numMultiple5 % 5 != 0) numMultiple3 += numbers[i]; //所有3的倍数相加 else arrayList.add(numbers[i]); //存储不是3和5的倍数的数 } //定义j,用来作为遍历arrayList时的指针数 int j = 0; boolean bool = check(numMultiple3, numMultiple5, arrayList, j); return bool; } private static boolean check(int sum3, int sum5, ArrayList<Integer& a445 gt; list, int j) { if (j >= list.size()) //当j大于list.size(),说明此时list已经遍历完 return sum3 == sum5; else { //遍历,将不是3和5的倍数的数,分别跟之前存储的numMultiple3和numMultiple5相加,返回最终相加比较的结果 return check(sum3 + list.get(j), sum5, list, j + 1) || check(sum3, sum5 + list.get(j), list, j + 1); } } }
相关文章推荐
- java web项目中的properties文件中的属性值在启动后进行修改(数据库密码加密等)
- linphone-PresenceModel.java文件分析
- Eclipse闪退/打不开/无法启动/一闪而过
- Java Swing 基本组件
- java之IO包概述并讲解显示文件信息
- Java Sax 初学
- Java命名规则
- Eclipse代码注释模板
- Eclipse安装SVN教程
- 关于Java 里的String和对象
- 多线程复制文件
- java中的高级流
- Java后台如何弹出window的下载对话框
- Java类的继承----构造器,方法的重载
- 非常难得的一张类加载内存图(看图之后才会明白JAVA内存的结构)
- Java数据类型和运算符
- java图像处理---特殊颜色二值化处理
- java反序化thrift
- 参照SpringBoot的自动配置
- Spring AOP自定义Annotation搭配log4j做日志