| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6167 人关注过本帖
标题:求大神解答算法:求n个正整数相加等于定值的所有可能情况
只看楼主 加入收藏
weigewan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-8-23
收藏
 问题点数:0 回复次数:11 
求大神解答算法:求n个正整数相加等于定值的所有可能情况
RT 例如给定定值7 正整数个数为4 因为7=1+1+1+4=1+1+2+3 那么和能表示为1 1 1 4,1 1 2 3,……的形式
另外 1 1 1 4与1 1 4 1需要分别表现出来 不能合为一种
数与数之间可重复
想了半天用数组和结构体类什么的似乎都没办法很好解决……求大神帮助解答 谢谢!

[此贴子已经被作者于2016-8-23 15:30编辑过]

搜索更多相关主题的帖子: 正整数 结构体 
2016-08-23 14:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
什么叫“带序表示”?你发帖后,不自己再读一遍吗?
只是“数字”吗?不是“正整数”吗?那有无穷个。

不懂什么是“带序表示”,假如是求数量的话,就是最简单的排列组合嘛
以数字7和次数4为例,数量就是 6*5*4 / 3*2*1


[此贴子已经被作者于2016-8-23 15:26编辑过]

2016-08-23 14:45
weigewan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-8-23
收藏
得分:0 
回复 2楼 rjsp
我还怕我没说明白所以加了例子 看来加了例子之后还是没说明白……

谢谢指教 已修改主题内容

[此贴子已经被作者于2016-8-23 15:34编辑过]

2016-08-23 15:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 3楼 weigewan
随手瞎写的,下班了,你自己检查一下有没有错误
程序代码:
#include <stdio.h>
#include <stdlib.h>

void foo( unsigned m, unsigned n )
{
    if( m<n || n==0 )
        return;
    unsigned* buf = calloc( n, sizeof(unsigned) );

    while( 1 )
    {
        // 输出
        for( unsigned* p=buf+1; p!=buf+n; ++p )
            printf( "%u+", *p-*(p-1)+1 );
        printf( "%u\n", m-n-buf[n-1]+1 );

        // 下一个
        unsigned* p;
        for( p=buf+n-1; p!=buf && *p==m-n; --p );
        if( p == buf )
            break;
        ++*p;
        for( ++p; p!=buf+n; ++p )
            *p = *(p-1);
    }

    free( buf );
}

int main( void )
{
    foo( 7, 4 );

    return 0;
}

输出
1+1+1+4
1+1+2+3
1+1+3+2
1+1+4+1
1+2+1+3
1+2+2+2
1+2+3+1
1+3+1+2
1+3+2+1
1+4+1+1
2+1+1+3
2+1+2+2
2+1+3+1
2+2+1+2
2+2+2+1
2+3+1+1
3+1+1+2
3+1+2+1
3+2+1+1
4+1+1+1

2016-08-23 16:43
weigewan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-8-23
收藏
得分:0 
回复 4楼 rjsp
调试修改后成功了 十分感谢!!
2016-08-29 20:17
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 2楼 rjsp
请教个问题:为什么7分为4项相加的数量为c(6,3)?
2016-08-29 21:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
7分4项
也就是7个1排成一行,之间有6个空格,只要插进去3个分隔符就会分割成4份
所以是C(6,3)

[此贴子已经被作者于2016-8-30 08:26编辑过]

2016-08-29 21:46
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 7楼 rjsp
哦,知道了谢谢!
2016-08-29 21:53
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
我记得有一个可以伸缩的递归算法(不指定有多少个因子组合而成)。那么如果楼主不希望有重复的结果出现,这个程序就不用往回递归,但是如果有需要就会输出注释部分的结果
比如对于4
1+3=4
1+2+1=4
1+1+1+1=4
//1+1+2=4
2+2=4
//2+1+1=4
//3+1=4


φ(゜▽゜*)♪
2016-08-30 08:15
weigewan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-8-23
收藏
得分:0 
回复 4楼 rjsp
不好意思 再想请问一下:如果想把结果存入行为4 列数为可能结果数的二维数组里 那么要如何操作?我指针学得不大好 直接把数组元素赋予指针 结果结果并不是想要的 谢谢!
2016-09-02 20:06
快速回复:求大神解答算法:求n个正整数相加等于定值的所有可能情况
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013160 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved