整数分划问题(递归与非递归)
2011-05-24 13:20
162 查看
整数分划:
给定一个正整数 n , 一个由 r 个正整数组成的数组 λ = ( x1 , x2, . . . . , xr) 如果满足 x1 + x2 + ··· + xr = n 且 x1 ≥ x2 ≥ ··· ≥ xr ≥ 1, 就称数组 λ 是 n 的一个分划。n 的所有不同的分划的个数记作 p(n)。
比如说 4 的分划 p(4) = 4 :
4 = 4 ;
4 = 3 + 1 ;
4 = 2 + 2 ;
4 = 2 + 1 + 1 ;
4 = 1 + 1 + 1 + 1 ;
我们可以像字典给单词排顺序一样给 n 的所有分划排一个顺序:对于 n 的两个不同的分划 λ = ( x1 , x2, . . . . , xr) 和 μ = ( y1 ,y2, . . . . , ys),如果 λ 的 “首字母” x1 比 μ 的 “首字母” y1 大,就规定在字典序下 λ 比 μ 大,反之则规定 μ 比 λ 大。如果 x1 = y1 ,那么就比较它们的下一个 “字母” x2 和 y2 . . . . 这样继续下去,直到 λ 和 μ 在某一个位置上分出大小,根据这个位置上的大小关系来定义 λ 和 μ 之间的大小关系。在上面的例子中,我们就是按照字典序依次排列的 4 的分划。显然,( n ) 是所有分划中最大的,而 ( 1 , 1 , . . . , 1) 则是所有分划中最小的。这个比较 n 的分划的大小的规则和 C 语言比较字符串大小的规则是一样的。
写程序给定一个整数,输出所有分划。
给定一个正整数 n , 一个由 r 个正整数组成的数组 λ = ( x1 , x2, . . . . , xr) 如果满足 x1 + x2 + ··· + xr = n 且 x1 ≥ x2 ≥ ··· ≥ xr ≥ 1, 就称数组 λ 是 n 的一个分划。n 的所有不同的分划的个数记作 p(n)。
比如说 4 的分划 p(4) = 4 :
4 = 4 ;
4 = 3 + 1 ;
4 = 2 + 2 ;
4 = 2 + 1 + 1 ;
4 = 1 + 1 + 1 + 1 ;
我们可以像字典给单词排顺序一样给 n 的所有分划排一个顺序:对于 n 的两个不同的分划 λ = ( x1 , x2, . . . . , xr) 和 μ = ( y1 ,y2, . . . . , ys),如果 λ 的 “首字母” x1 比 μ 的 “首字母” y1 大,就规定在字典序下 λ 比 μ 大,反之则规定 μ 比 λ 大。如果 x1 = y1 ,那么就比较它们的下一个 “字母” x2 和 y2 . . . . 这样继续下去,直到 λ 和 μ 在某一个位置上分出大小,根据这个位置上的大小关系来定义 λ 和 μ 之间的大小关系。在上面的例子中,我们就是按照字典序依次排列的 4 的分划。显然,( n ) 是所有分划中最大的,而 ( 1 , 1 , . . . , 1) 则是所有分划中最小的。这个比较 n 的分划的大小的规则和 C 语言比较字符串大小的规则是一样的。
写程序给定一个整数,输出所有分划。
相关文章推荐
- 2705:扩号匹配问题(递归与非递归)
- 台阶问题引出的递归和非递归的思考
- 背包问题的递归和非递归的解法
- n后问题————回溯法求解(递归与非递归)
- [c++,algorithm] 基于非递归和递归的 01背包问题
- 0/1背包问题(递归与非递归)
- 用递归的方法和非递归方法解决8皇后问题
- 八皇后问题详细推导(递归和非递归,Go语言实现)
- 背包问题的递归和非递归的解法
- 用递归和非递归两种办法计算Hanoi问题
- 用递归的方法和非递归方法解决8皇后问题
- 0/1背包问题(递归与非递归)
- 二叉树:后序,递归和非递归,应用(求祖先问题)
- 迷宫问题递归与非递归求解
- N皇后问题的非递归回溯和递归回溯
- 八皇后问题--递归和非递归
- 最大子数组问题的递归和非递归(线性时间)代码
- 回溯法解决N皇后问题——递归与非递归求解
- 背包问题的递归和非递归的解法
- 编程之美--最大公约数问题--递归和非递归