求大神解答算法:求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; }