华为oj 201301 JAVA题目0-1级
2016-03-07 10:57
363 查看
有人说用“背包问题”可以解决(没有验证),因为对于动态规划还是有些许抗拒,所以还是用别的方法解决!
思路如下:
1.把数据分成三类,第一类,能
被5整除的(包括既能被5整除又能被3整除的);第二类,能被3整除的;第三类,其它数字。
2.分别算出前两类的数字和,sumj,sumk
3.将第三类数字进行划分组合(我程序实现的有bug,但是能通过oj,在划分组合时我只用了一次循环,这是远远不够的,正确的算法待日后更新吧!)
4.oj给的测试用例输出的应该都是true;
#include <iostream> #include <algorithm> using namespace std; int main() { int n, temp, a[100], b[100], c[100]; int j, k, l, max = 0; int sumj, sumk, suml, tempsum; //初始化 memset(a, 0, sizeof(int)* 100); memset(b, 0, sizeof(int)* 100); memset(c, 0, sizeof(int)* 100); j = k = l = 0; sumj = sumk = suml = 0; // 获取输入数据 cin >> n; if (n < 2) { cout << "false" << endl; return 0; } for (int i = 0; i < n; i++) { cin >> temp; if (abs(temp) % 5 == 0) { a[j] = temp; j++; } else if (abs(temp) % 3 == 0) { b[k] = temp; k++; } else { c[l] = temp; l++; } } for (int i = 0; i < n; i++) { sumj += a[i]; sumk += b[i]; suml += c[i]; } int i; tempsum = 0; for (i = 0; i < l; i++) { if (abs(sumj - sumk) == abs(suml - tempsum - tempsum))//将suml分成两部分tempsum 和 suml - tempsum,这两部分的差值和(sumj和sumk的差值)相同 { break; } tempsum += c[i]; } if (i < l) { cout << "true" << endl; } else { cout << "false" << endl; } return 0; }
相关文章推荐
- 浅析Java Web错误/异常处理页面
- java+selenium+cucumber框架之before和after
- java assert断言的用法
- jdk1.6下使用sardine和jackrabbit-webdav的问题
- java 反射详解
- JAVAWeb的大作业项目管理
- 深入理解Java虚拟机
- java前三本基础知识总结
- 【leetcode】【122】Best Time to Buy and Sell Stock II
- Spring
- java并发编程(4)--线程池的使用
- Struts2中出现严重: Dispatcher initialization failed错误
- Eclipse文本编码格式修改为UTF-8
- SpringMVC 使用JSR-303进行校验 @Valid
- Java多线程学习(六)
- java发送邮件
- Struts2中Action必须实现execute方法吗
- java中的包
- 关于关闭Eclipse的控制台自动跳出
- springmvc与struts2 mvc的区别