读书人

打印一个整数区划全部方案

发布时间: 2012-08-29 08:40:14 作者: rapoo

打印一个整数划分全部方案
整数划分就是将一个正整数表示成一系列正整数之和 例如整数6可以划分成一下11中方案:
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

Java code
半成品代码:public class Main{    static int sum=0;    static int t[]=new int[10];    static void dfs(int n,int m)    {        if(sum==m)        {//            Arrays.sort(t,1,n-1);            System.out.print(m+"=    ");            for(int k=1;k<=n-1;k++)                System.out.print(t[k]);            System.out.println();        }        else        {            for(int i=1;i<=m;i++)//for(int i=m;i>=1;i--)            {                sum+=i;                if(sum<=m)                {                    t[n]=i;                    dfs(n+1,m);                    sum-=i;                }else                {    sum-=i;                    return;                }                        }        }    }    public static void main(String args[])    {        dfs(1,6);    }}正常打印:6=    1111116=    111126=    111216=    11136=    112116=    11226=    11316=    1146=    121116=    12126=    12216=    1236=    13116=    1326=    1416=    15....但是去掉第一个注释想排下序就打印这样的了:........6=    156=    111216=    11126=    11216=    1136=    11216=    1126=    1316=    146=    11316=    1126=    1216=    136=    1416=    126=    516=    6很奇怪但是不知道什么原因。我把第二行注释也去掉上面的for加上注释,却只打印一行:6=    6

本来打算排好序,去掉相同的方案,现在出了这个问题,大家帮个忙,代码不长。

[解决办法]
探讨

C/C++ code
#include <stdio.h>

int split(int n, int m)
{
if(n < 1 || m < 1) return 0;
if(n == 1 || m == 1) return 1;
if(n < m) return split(n, n);
if(n == m) return (sp……

读书人网 >软件架构设计

热点推荐