问题:某财务部门结账时发现金额不对,很可能是从明细上漏掉了一笔或者几笔,如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或者几笔吗?
如果有多种可能,则输出所有可能的情况
我们规定,用户输入的第一行是:有错的总金额。
接下来是一个整数n,所有可能漏掉的金额组合,每个情况1行,金额按照从小到大排列,中间用空间分开
比如:
用户输入:账目的明细
6
5
3
2
4 //我们把3,2,4,3,1相加之后大于6
3
1
表明:有错的总金额是6,明细共有5笔
此时,程序应该输出:有错的组合忘记加的
1 3 3
1 2 4
解决方法是:排列组合的问题
A B C D E F
漏掉的情况可能有 A E
A C F
A B C …

package mingxi;public class Mingxi {public static void f(int err_sum,int[] a,int k,int total_sum,boolean[] b)//err_sum:错误的和;a[]明细原始数据;k:当前要考虑元素的位置;total_sum:当前已经累加的和//b表示a的对应项是否选取,记录取舍{if(total_sum>err_sum)   //当total_sum>err_sum的时候return;    //程序返回if(err_sum==total_sum) {   //错误明细和已累加的和相等for(int i=0;i<b.length;i++)  //第几项不取写出来if(b[i]==false)System.out.print(i+" ");   //true的时候打印iSystem.out.println();return;}if(k>=a.length)   //k超出数组范围return;//分为以下两种情况b[k]=false;   //假设b的第k项不取f(err_sum,a,k+1,total_sum,b);  //a[k]不加total中b[k]=true;   //假设b的第k项取total_sum+=a[k];     //考虑a[k]是否要加在total_sum中f(err_sum,a,k+1,total_sum,b);   //得到的递归情况b[k]=false;   //回溯!!!;因为前面b取过true}public static void main(String[] args) {int sum=6;   //以6为例,怎样计算使得漏掉的数目相加等于6int[] a= {3,2,4,3,1};   //明细账目,怎样经过相加计算才能和已知的和匹配boolean[] b=new boolean[a.length];   //表示a的对应项是否选取f(6,a,0,0,b);    //参数传递}
}


运行结果:
第一行:数组的0和2分别对应明细的3和4;去掉这两项相加为6
第二行:数组0 3 4去掉对应的这三项,相加结果为6.
第三行:…
以上我求的是第几项数据被漏掉

递归法:财务金额漏掉1笔或者几笔(排列组合)相关推荐

  1. 金额查错—某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔

    题目描述: 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔. 如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户 ...

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

    /** 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔. * 如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? * 如果有多种可能,则输出所有可能的情况. * 我们规 ...

  3. 某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔 递归算法

    import java.util.Scanner;public class jianlou {/* * 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔. * 如果已知明细账目清单 ...

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

    /** 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.* 如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗?* 如果有多种可能,则输出所有可能的情况.* 我们规定:用 ...

  5. 2016校招腾讯研发岗笔试题---递归法求解格雷码

    题目:一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码( Gray Code ).请编写一个函数,使用递归方法生成 N 位的格雷码. 测试输入输出如下 输入:1 输出:[ ...

  6. 换零钱程序c语言,《SICP》换零钱的递归法与迭代法

    咳咳..先说一段废话.. 最近开始看SICP这本书,正看到了换零钱的部分.看到里面那么多简明生动的例子,还有作者的细心讲解,真是唤起了对学习的无限激情.之前也看过王垠的一些文章,提到了诸如Lisp.s ...

  7. 蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心算法、差分与前缀和

    注意:加了题目链接 目录 注意:加了题目链接 一.打表模拟法 介绍 1. 算式问题 题目描述 解析与代码演示 2. 求值 题目描述 解析与代码演示 3. 既约分数 题目描述 解析与代码演示 4. 天干 ...

  8. 用递归法计算斐波那契数列的第n项

     斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...

  9. 二叉树-对称二叉树(递归法)

    题意: 给定一个二叉树,检查它是否是镜像对称的. 中间划开,看是否对称 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / 2 2 / \ / 3 4 4 3 思路:(递归法) 这里镜像 ...

最新文章

  1. NSArray 过滤
  2. Python学习笔记--函数
  3. ELK错误1_Kafka-Logstash-Elasticsearch过程,Elasticsearch报grokparsefailure错误
  4. CFtpFileFind FindFile卡住的问题
  5. 关于卸载Python第三方包的粗暴方法
  6. 自己的 「 代码制造 check list 」
  7. 排序算法-冒泡排序详细讲解(BubbleSort)
  8. 解决WPS文档不加载金格office360签章的问题
  9. 如何学习Java软件开发
  10. protel dxp 2004 sp2
  11. 达拉斯大学计算机硕士专业排名,美国名校之德克萨斯大学达拉斯分校研究生专业排名榜单 优势专业你选对了...
  12. 重磅出击: Rancher 2.4.x 迁移自定义 k8s 集群
  13. 【CVPR 2022】目标检测SOTA:DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection
  14. ubuntu ogv
  15. 公司新加了一台友宝自动售货机引发的思考-适配器模式
  16. 如何用 Roam Research 备课?
  17. Arcgis绘图初级教程
  18. 畅捷通T+ v2接口 发布IIS报错 RsaUsingSha with PSS
  19. 谷歌浏览器(Google Chrome)清除密码等缓存记录
  20. Blender接下来都会开发什么功能?2021开发开发规划公布

热门文章

  1. python工资这么高为什么不学-人人学Python,为什么就业拿高薪的那么少?
  2. python中文版软件下载-Python中文版下载_PyCharm官方最新版下载_3DM单机
  3. python软件下载3版本-Python 3.7.2和3.6.8版本发布下载,附更新说明
  4. python入门代码大全-初学python有哪些可以临摹的小段练习代码素材?
  5. leaks Android内存泄露,Android LeakCanary 检测内存泄露
  6. php分页显示多少页,php实现分页显示
  7. java标识符_Java标识符的简单介绍
  8. linux服务器80端口是默认开放的么_「Linux」25节-防火墙iptables
  9. mysql断言命令_mysql的触发模拟断言
  10. C#字典类型转URL参数字符串