Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1523968
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2010-01-13 16:55:00

//按递增非递减序排列
void integer_split(itn n,int k)
{
    int seq_num = 0; //拆分的序列
    int *result = new int[k];     //保存拆分之后的结果
    int i=0;
    int remain=n-1;            //剩余的还未被拆分的部分
    //第一个拆分的部分应该小于n/k, 否则总和会大于原来的数
    int nmt = n/k;
    result[0] = 1;
    while(result[0]<=nmt)
    {
        if(i==k-1)     //找到一个解
        {
            result[i] += remain;
            printf("第%2d种拆分:",++seq_num);
            for(int j=0;j<=i;j++)
                printf("%2d",result[j]);
            printf("\n");        //打印每一个分割情况
            i--;
            result[i]++;
            remain = result[i+1]-1;    //打印结果之后,进行一次加1的回溯
        }else if(remain >=result[i])        //继续向前搜索
        {
            i++;
            result[i] = result[i-1];
            remain-=result[i];
        }else{                    //分割部分不满足条件时进行回溯
            i--;
            result[i]++;
            remain = remain + result[i+1]-1;
        }
    }
}
阅读(572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~