C++实现整数划分并输出结果的完整代码示例

需积分: 50 26 下载量 20 浏览量 更新于2024-09-10 2 收藏 2KB TXT 举报
整数划分是指将一个给定的正整数n分解成若干个连续或不连续的整数之和的过程,同时要求这些整数的和等于n。在这个C/C++代码中,开发者实现了一个名为`q`的递归函数,用于解决整数划分问题。函数接受三个参数:n(待划分的整数)、m(子区间范围)以及i(记录已选择的整数的位置)。 首先,`q1`函数用于计算两个整数n和m的最大公约数,它是递归终止的条件,当n和m都小于1时返回0,当n或m为1时返回1,对于一般情况,如果n大于m,则递归调用自身处理n-m和m,直至找到最优解。 在`q`函数中,主要执行以下操作: 1. 当n等于目标值k且不等于m时,表示已经找到一个划分方案,输出结果并重置计数器i。 2. 如果n为1,直接输出1作为划分结果。 3. 如果m为1,输出n个1(n-1次1和一次1),因为每个子区间都是1。 4. 对于n小于m的情况,直接递归调用自身,不做其他处理。 5. 当n等于m时,输出当前的n,然后遍历之前选择的整数,并加上它们(set数组)。 6. 对于n大于m的情况,先输出m,将它添加到set数组中,然后递归处理剩余部分n-m和m,并在最后调整set数组的计数。 主函数`main`负责输入n,调用`q1`计算最大公约数,然后调用`q`进行实际的划分,每次划分后输出结果,并在处理完一个n后换行,直到读取到无效输入(n<=0)为止。 这个程序通过递归和动态存储解决方案,实现了对整数n的划分,并输出满足条件的划分结果。这对于理解和学习递归算法、整数分解等基础数学概念非常有帮助,同时也展示了如何在C/C++中实现此类问题的编程解决方案。