算法笔记_041:寻找和为定值的多个数(Java)
目录
1 问题描述
输入两个整数n和sum,要求从数列1,2,3,...,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来。
2 解决方案
上述问题是典型的背包问题的应用,即先找出n个数的所有组合,再在这些组合中寻找组合数相加之和等于sum的组合,并依次输出这些组合中的数。
具体代码如下:
- package com.liuzhen.array_2;
- public class ManySumN {
- /*
- * 函数功能:以字符串形式返回1~n个数的所有子集,其中0代表不包含其中数字i,1代表 包含其中数字i
- * 此段代码是运用反射格雷码的思想,具体解释详见:算法笔记_019:背包问题(Java)
- */
- public String[] getAllGroup(int n){
- int len = (int) Math.pow(2, n);
- String[] result = new String[len];
- if(n == 1){
- result[0] = "0";
- result[1] = "1";
- return result;
- }
- String[] temp = getAllGroup(n-1);
- for(int i = 0;i < temp.length;i++){
- result[i] = "0" + temp[i];
- result[len-1-i] = "1" + temp[i];
- }
- return result;
- }
- /*
- * 参数n:代表有1~n的n个不同整数
- * 函数功能:打印出1~n中所有随机组合的几个数,其相加的和等于sum
- */
- public void printManySumN(int n,int sum){
- System.out.println("1~"+n+"个数中,相加之和等于"+sum+"的所有组合数为:");
- String[] allGroup = getAllGroup(n);
- for(int i = 0;i < allGroup.length;i++){
- char[] temp = allGroup[i].toCharArray();
- int tempSum = 0;
- for(int j = 0;j < temp.length;j++){
- if(temp[j] == '1')
- tempSum += (j+1);
- }
- if(tempSum == sum){
- for(int j = 0;j < temp.length;j++){
- if(temp[j] == '1')
- System.out.print((j+1)+" ");
- }
- System.out.println();
- }
- }
- }
- public static void main(String[] args){
- ManySumN test = new ManySumN();
- test.printManySumN(10, 16);
- }
- }
运行结果:
- 1~10个数中,相加之和等于16的所有组合数为:
- 7 9
- 6 10
- 4 5 7
- 3 4 9
- 3 5 8
- 3 6 7
- 2 3 5 6
- 2 3 4 7
- 2 4 10
- 2 5 9
- 2 6 8
- 1 2 6 7
- 1 2 5 8
- 1 2 4 9
- 1 2 3 4 6
- 1 2 3 10
- 1 3 5 7
- 1 3 4 8
- 1 4 5 6
- 1 5 10
- 1 6 9
- 1 7 8
算法笔记_041:寻找和为定值的多个数(Java)的更多相关文章
- 算法笔记_037:寻找和为定值的两个数(Java)
目录 1 问题描述 2 解决方案 2.1 排序夹逼法 1 问题描述 输入一个整数数组和一个整数,在数组中查找两个数,满足他们的和正好是输入的那个整数.如果有多对数的和等于输入的整数,输出任意一对即 ...
- 在数组中寻找和为定值的n个数
/*-------------------------------------------------------*/ /*寻找和为定值的两个数 输入一个数组A[0,N-1]和一个数字Sum,在数组中 ...
- Java实现寻找和为定值的多个数
1 问题描述 输入两个整数n和sum,要求从数列1,2,3,-,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来. 2 解决方案 上述问题是典型的背包问题的应用,即先找出n个数 ...
- 算法笔记_035:寻找最小的k个数(Java)
目录 1 问题描述 2 解决方案 2.1 全部排序法 2.2 部分排序法 2.3 用堆代替数组法 2.4线性选择算法 1 问题描述 有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低. 2 ...
- 算法笔记_031:计算中值和选择问题(Java)
目录 1 问题描述 2 解决方案 2.1 计算中值问题 2.2 选择问题 1 问题描述 中值问题是求一个n个数列表中某一数组下标k,它要求该下标元素比列表中的一半元素大,又比另一半元素小,这个中 ...
- 窥探算法之美妙——寻找数组中最小的K个数&python中巧用最大堆
原文发表在我的博客主页,转载请注明出处 前言 不论是小算法或者大系统,堆一直是某种场景下程序员比较亲睐的数据结构,而在python中,由于数据结构的极其灵活性,list,tuple, dict在很多情 ...
- 算法笔记_077:蓝桥杯练习 K好数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4, ...
- 算法笔记_061:蓝桥杯练习 字串统计(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然 ...
- 算法笔记_192:历届试题 买不到的数目(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有 ...
随机推荐
- [CC-ANUGCD]Maximum number, GCD condition
[CC-ANUGCD]Maximum number, GCD condition 题目大意: 一个长度为\(n(n\le10^5)\)的数列\(A(A_i\le10^5)\),\(m(m\le10^5 ...
- Problem G: 切煎饼
Description 王小二自夸刀工不错,有人放一张大的圆煎饼在砧板上,问他:饼不允许离开砧板,切100刀最多能切多少块? Input 多组测试数据,每组输入1个整数,代表切的刀数 Output 每 ...
- [bzoj1025][SCOI2009]游戏 (分组背包)
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一 且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们 ...
- bzoj 1115: [POI2009]石子游戏Kam -- 博弈论
1115: [POI2009]石子游戏Kam Time Limit: 10 Sec Memory Limit: 162 MB Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前 ...
- Android ConstraintLayout约束控件链接整理
Android新特性介绍,ConstraintLayout完全解析 探索Android ConstraintLayout布局 了解使用Android ConstraintLayout
- [制作实践]一种基于LM2576的多功能开关电源设计
http://bbs.kechuang.org/read-kc-tid-9837-page-e.html 摘要:本文介绍了一种性价比高.功能丰富的程控开关电源的设计,对基于LM2576控制核心的升.降 ...
- Struts2 @ResultPath注释示例
在Struts 2中, @ResultPath 注解用于控制Struts2找到存储的结果或JSP页面.默认情况下,它会找到结果页在 “WEB-INF/content/” 文件夹. 不知道为什么在Str ...
- python笔记22-literal_eval函数处理返回json中的单双引号
前言 在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常 ...
- sqlite3 支持的关联查询
1.支持多表连接,例如 select * from student,class where student.cid=class.id; 2.支持左外连接(left outer join) 例如: se ...
- iOS:CoreData数据库的使用四(数据库和UITableViewController以及NSFetchedResultsController一起使用)
CoreData数据库虽然可以和tableview或者UITableViewController一起使用将数据显示在表格上,但是在准备数据的时候,这种方式需要用一个可变数组来装从数据库一次性取出来的所 ...