求大神解答算法:求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编辑过]
程序代码:#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;
}