某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔。如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗?

如果有多种可能,则输出所有可能的情况。

我们规定:用户输入的第一行是:有错的总金额。

接下来是一个整数n,表示下面将要输入的明细账目的条数。

再接下来是n行整数,分别表示每笔账目的金额。

要求程序输出:所有可能漏掉的金额组合。每个情况1行。金额按照从小到大排列,中间用空格分开。

比如:

用户输入:

6

5

3

2

4

3

1

表明:有错的总金额是6;明细共有5笔。

此时,程序应该输出:

1 3 3

1 2 4

3 4

为了方便,不妨假设所有的金额都是整数;每笔金额不超过1000,金额的明细条数不超过100。

package com.liu.ex2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner; public class Main {
public static ArrayList<Integer> list = new ArrayList<Integer>();
public static ArrayList<String> result = new ArrayList<String>();
public static int[] value; //表示明细账目清单
public static int sum = 0; //表示正常总金额-出错总金额值 public int getSum() {
int result = 0;
for(int i = 0;i < list.size();i++)
result += list.get(i);
return result;
} public void dfs(int step) {
while(step < value.length) {
list.add(value[step]);
if(getSum() == sum) {
ArrayList<Integer> tempList = new ArrayList<Integer>();
for(int i = 0;i < list.size();i++)
tempList.add(list.get(i));
Collections.sort(tempList);
StringBuilder s = new StringBuilder("");
for(int i = 0;i < tempList.size();i++)
s.append(tempList.get(i)+" ");
if(!result.contains(s.toString())) {
result.add(s.toString());
System.out.println(s);
}
}
step++;
dfs(step);
list.remove(list.size() - 1);
}
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int w = in.nextInt();
int n = in.nextInt();
value = new int[n];
for(int i = 0;i < n;i++) {
int a = in.nextInt();
value[i] = a;
sum = sum + a;
}
sum = sum - w;
test.dfs(0);
}
}

最新文章

  1. Python全栈开发【基础四】
  2. gulp
  3. 怎么利用javascript删除字符串中的最后一个字符呢?
  4. PHPCMS 实现上一篇下一篇的几种方法
  5. PHP如何连接Access数据库
  6. css 简单的 before after 笔记
  7. CSS学习------之简单图片切换
  8. JAVA 相关资料
  9. linux之SQL语句简明教程---TRIM
  10. loadrunner时间损耗-analysis中忽略
  11. 201521123044 《Java程序设计》第4周学习总结
  12. Mina源码阅读笔记(三)-Mina的连接IoAccpetor
  13. 3. mysql性能分析
  14. 一个简单好用的日志框架NLog
  15. Linux环境变量详解与应用
  16. Android Rom build.prop文件详解
  17. mac 关于默认python2下的pip,和python3下pip 的坑
  18. Https 安全传输的原理
  19. 解析word公式的解决方案(office插入和wps插入不同的解决方案)
  20. MVC仓储执行存储过程报错“未提供该参数”

热门文章

  1. [hdu4763]next数组的应用
  2. Mysql常用sql语句(22)- insert 插入数据
  3. PHP正则表达式语法汇总
  4. AT命令集详解
  5. 8、HTTPS证书Actions无法导出问题
  6. python unittest TestCase间共享数据(全局变量的使用)
  7. Linux系统中如何升级pip
  8. javascript 之 eventLoop
  9. Excel导出到DataSet
  10. ORCLE 列转行