下面的代码用于打印加法的组合。在打印时使用递归。思路来自于打印一个集合的所有子集;不过对于集合的所有子集,没有重复的情况。在打印加法组合的时候,因为有重复的情况的。这里处理重复是通过判断是否递减序列来实现的。即只保留有序序列即可实现。
递归结束后需要恢复现场
/**
* 打印加法组合
* 例如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--;
}
}
}
分享到:
相关推荐
`是一个输出语句,使用C++标准输入输出库(iostream)中的`cout`对象将字符串“恭喜您答对了”打印到控制台。`endl`是一个操纵符,用于在输出后添加换行符,使输出更加清晰。 而在`else`部分,`cout 很遗憾继续努力...
在VB(Visual Basic)编程中,创建一个加法表并将其导出到Word文档是一项基本但实用的任务。这个例子提供了一个简单的方法来实现这一功能,它没有依赖任何外部控件,仅使用VB内置的功能,使得代码更加简洁和易懂。 ...
进位加法是学生数学学习中的一个关键概念,意味着当加数的某一位数超过10时,需要将超出的数值进位到下一位去计算。 3. 竖式计算题:竖式计算是数学中的一种书写格式,便于学生清晰地展示计算过程。在低年级,通过...
它涵盖了10以内所有可能的加法组合,不仅有助于孩子们加强数学基础知识的记忆,而且还能培养他们的心算能力、逻辑思维和问题解决技巧。通过使用这个练习题集,孩子们可以在家长或教师的指导下,不断挑战自己,提升...
此外,还有一个循环结构用于遍历所有可能的输入组合,以确保加法器在各种情况下都能正确运行。最后,使用`$monitor`函数打印出每次加法操作的时间戳、输入和输出值,以便于调试和验证。 #### 总结 通过以上分析...
1. **理解并应用加法和减法的基本概念**:知道两个数相加或相减的结果是什么。 2. **掌握数的进位和借位**:在进行两位数运算时,如何处理超过10的情况。 3. **提高计算速度**:通过大量的口算练习,孩子们能够快速...
然后,通过循环输入的方式,用户可以依次输入每个多项式的系数和指数,每输入一对系数和指数就会创建一个新的节点并添加到对应的链表末尾。当输入的系数或指数为0时,结束输入。 #### 合并两个链表 (AddList) 这...
在给定文件内容中,标题和描述指向的是一个包含100道10以内加减法口算题目的练习资料,该资料适用于一年级学生,目的是帮助学生练习并掌握基本的数学加减法运算。从提供的部分内容来看,这份练习题包含了大量的简单...
本项目涉及的主题是"C++编写的多项式的加法、乘法",这是一个典型的算法实现,涉及到数学和计算机科学的交叉应用。下面将详细讨论这个主题的知识点。 首先,多项式是数学中的一个重要概念,它由常数、变量和它们的...
本资源提供了利用Excel实现珠心算自动出题的功能,这对于家长和教师来说是一个非常实用的工具,可以高效地为孩子准备学习材料。 首先,我们要了解Excel在其中的作用。Excel是一款强大的电子表格软件,它支持公式...
对于简单的线性时间复杂度乘法,可以遍历一个多项式的每一项,并将其与另一个多项式的每一项相乘,然后将结果累加到结果多项式中。 4. **多项式微分**: 微分操作涉及对每个项的指数进行减一并乘以相应的系数。在M...
Go语言程序中,首先定义一个数组digits用于存储数字序列1到9,然后定义一个变量searchSum表示目标值100,以及一个计数器kind用于记录有多少种组合能达到目标值。 在main函数中,初始化path变量为"1",然后调用deep...
2. **减法运算**:减法是表示从一个数中去掉另一个数的算术运算。例如,3-1=2。 3. **数字的连续性**:加法练习中也涉及到了数字的连续性,如1+1=2,2+1=3,这有助于学生掌握数字的递增关系。 4. **加法的交换律**...
这些练习题包括了20以内所有可能的加减法组合,不仅涵盖了非进位和非退位的情况,也包括了各种进位加法和退位减法的实例。通过重复练习,学生能够加强对数字关系的理解,并在实践中加深记忆,从而提高计算的速度和...
在链表中,每个元素(节点)包含数据以及指向下一个节点的指针。这使得链表在插入和删除元素时具有更高的灵活性,因为它无需移动其他元素。在这个项目中,链表用于存储一元多项式的各项。 二、一元多项式表示 一元...
- 动态链表结构则使用链表节点来存储每个系数和指数对,每个节点包含一个系数和一个指数,以及指向下一个节点的指针。 3. **算法设计**: - **加法和减法**:在两个多项式相加或相减时,需要将具有相同指数的项...
4. **填空减法**:同填空加法,但这里是减去一个数字,如( )-3=3,要求孩子找到一个数,减去3后等于3。 5. **加减法混合应用**:在更复杂的练习题中,比如9-( )=2,孩子们不仅需要进行减法运算,还要考虑到结果的...
而减法则是一个数被分解为两个或多个部分,计算其中一部分或差值。这些运算看似简单,却蕴含了数学中一些最基本也是最重要的概念。对于一年级的孩子而言,通过不断的练习和应用,他们将逐步构建起对加减法的基本认知...
2. 减法运算规则:减法部分涉及到将一个数减去另一个数,可以是两个一位数相减,或者从一个较大的数中减去一个小的数。例如:20 - 4 = 16、19 - 4 = 15等。减法教学帮助学生学习数的分解,理解数的倒数概念,以及...
杨辉三角,又称为帕斯卡三角,是数学中一个非常重要的概念,它在组合数学、概率论以及计算机科学中都有广泛应用。 杨辉三角的每一行是一组数字,从左到右和从右到左都是等差序列,每个数字是它正上方两个数字的和。...