`
jbm3072
  • 浏览: 209320 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

打印一个数的加法组合

阅读更多

下面的代码用于打印加法的组合。在打印时使用递归。思路来自于打印一个集合的所有子集;不过对于集合的所有子集,没有重复的情况。在打印加法组合的时候,因为有重复的情况的。这里处理重复是通过判断是否递减序列来实现的。即只保留有序序列即可实现。

 

递归结束后需要恢复现场

 

/**

 * 打印加法组合

 * 例如5可以输出:

 *  5 

4 1 

3 2 

3 1 1 

2 2 1 

2 1 1 1 

1 1 1 1 1 

 * 下面的代码使用了递归!

 * 在去重上,采用的是判断数组的顺序是不是按照降序排列的,如果是的话,则是符合条件的。否则不符合条件跳出; 

 * 本程序的核心递归要点是: 

 * 1. 申请一个数组给递归使用; 

 * 2. 递归代码在使用数组后需要恢复原状; 

 * 3. 递归的时机;

 * 

 * @author ajwang

 *

 */

public class Main {

 

public static void main(String[] args) {

int[] array = new int[5];

print(5, array, -1);

 

}

 

public static void print(int n, int[] array, int end) { 

 

//在n=1,n=0时,表明array里面已经保存了所有要打印的数字了。这时候就可以开始打印,不过考虑到重复的情况,如果不是递减的就不输出;

if (n == 0) { 

for (int i = 1; i <= end; i++) {

if(array[i-1]<array[i]){

return ;

}

}

for (int i = 0; i <= end; i++) {

System.out.print(array[i] + " ");

}

System.out.println();

return;

}

if (n == 1) {

 

array[++end] = 1;

for (int i = 1; i <= end; i++) {

if(array[i-1]<array[i]){

return ;

}

}

for (int i = 0; i <= end; i++) {

System.out.print(array[i] + " ");

}

System.out.println();

return;

}

//核心的递归循环代码,对于N>1的情况,分别对end的各种情况进行赋值,直到变为0;

for (int i = n; i > 0; i--) {

array[++end] = i;

print(n - i, array, end);

end--;

}

 

}

}

分享到:
评论

相关推荐

    10以内数的分解与组合

    加法10以内的加法1+0=11+1=22+0=21+2=32+1=33+0=31+3=42+2=43+1=44+0=41+4=52+3=53+2=54+1=55+0=51+5=62+4=63+3=64

    练习P20入门版答案

    现编程从键盘上输入一个自然数N(N的位数),计算截取后第一个数加第三个数减第二个数的结果。 13. 从键盘输入一段英文,将其中的英文单词分离出来:已知单词之间的分隔符包括空格、 问号、句号(小数点)和分号。 例如...

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    1.3.1 创建一个链表 1.3.2 向链表中插入结点 1.3.3 从链表中删除结点 1.3.4 销毁一个链表 1.3.5 实例与分析 1.4 栈 1.4.1 栈的定义 1.4.2 创建一个栈 1.4.3 入栈操作 1.4.4 出栈操作 1.4.5 栈的其他操作 1.4.实例与...

    西工大noj答案完整版.doc

    120.一维数组”加法“ 121.勇闯天涯 122.右上角 123.右下角 124.圆及圆球等的相关计算 125.圆及圆球等相关计算 126.程序员添加行号 127.找出数字 128.找幸运数 129.找最大数 130.整数位数 131.重组字符串 132.子序列...

    from-the-beginning:我的软件开发冒险的开始!

    在“ madlib”中,我学习了如何获取用户输入并将其... 21/11/3 在“猜谜游戏”中,我应用了布尔值,while循环和if语句的组合,以创建一个3猜迷你游戏来找到一个秘密单词。 (这不是一个非常有趣的游戏,但是请确保是。

    c语言题库问题和答案.docx

    循环结构习题:求一个数除以9的商等于它各位数字的平方和 86%(497/575) 14% 2020-4-23 1084 循环结构习题:求最优方案 50%(419/844) 53% 2020-4-23 1085 函数习题:计算公式s=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+…+n)的...

    C程序范例宝典(基础代码详解)

    实例005 3个数由小到大排序 6 实例006 a2+b2 8 实例007 整倍数 9 实例008 判断闰年 10 实例009 阶梯问题 11 实例010 评定成绩 12 实例011 整数加减法练习 13 实例012 模拟ATM机界面程序 14 1.3 ...

    leetcode双人赛-c-cpp-DSA:在我的大学课程之外完成的C和C++数据结构和算法

    打印两行,一加一减 比较数组如果array1的元素小于array2则返回-1,如果array1的元素大于array2则返回1,否则返回0 阶乘.c c 中的递归阶乘,递归使用不当,但仍然很有趣 循环指针 随机数播种随机数 反向.c 原地反转...

    Python Cookbook

    15.6 给一个XML-RPC服务提供一个wxPython GUI 544 15.7 使用Twisted的Perspective Broker 546 15.8 实现一个CORBA服务和客户 549 15.9 使用telnetlib执行远程登录 551 15.10 使用SSH执行远程登录 554 15.11 ...

    freemarker总结

    上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量: item_index:...

Global site tag (gtag.js) - Google Analytics