A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋蕈 中级黑马   /  2012-4-8 08:38  /  1912 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如,对于正整数n=6,可以分划为:
6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1+1
现在的问题是,对于给定的正整数n,编写算法打印所有划分。
用户从键盘输入 n (范围1~10)
程序输出该整数的所有划分。

2 个回复

倒序浏览
这道题也是我那天在学习的过程中无意看到的,想了很久没有想出来,但是后来在网上查了很久终于在一个朋友那里看见了他的这个程序,我觉得思路还蛮清晰的,希望对你有帮助!
package cn.dan.wenti ;
public class Test {
    public static void function(int[] str, int n, int m) {
        if (n == 0) {
            for (int i = 0; i <= m - 1; i++) {
                if (i == (m - 1))
                    System.out.println(str[i]);
                else
                    System.out.print(str[i] + " ");
            }
        } else {
            for (int i = n; i >= 1; i--) {
                if (m == 0 || i <= str[m - 1]) {
                    str[m] = i;
                    function(str, n - i, m + 1);
                }
            }
        }
    }

    public static void main(String[] args) {
        function(new int[6], 6, 0);
    }
}
回复 使用道具 举报
我艹!(此回复虽仅有两个字,却深刻地表达了回复人的深深的祝福与刻骨的情感,可谓言简意赅,一字千金,字字扣人心弦,字字催人泪下,足可见回复人扎实的文字功底和信手拈来的写作技巧及惨绝人环的创新能力。实是佩服佩服!再加上以感叹号收尾,点睛之笔,妙笔生花,意境深远,照应前文,升华主题,把回复人的感情表达得淋漓尽致,给人无限感动和惆怅,有浑然天成之感,实乃回复中之极品,祝福中之绝笔.)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马