user-0 提问: 求各位大神帮忙解答！！！

回复:
user: user-1
content: 数如何分解 7 分解      最大含1 的     7 = 1+1+1+1+1+1+1     最大含2      7 = 2+1+1+1+1+1     7 = 2+2+1+1+1     7 = 2+2+2+1     最大含3     7 = 3+1+1+1+1     7 = 3+2+1+1     7 = 3+2+2     7 = 3+3+1     最大含4      7 = 4+1+1+1     7 = 4+2+1     7 = 4+3     最大含5      7 = 5+1+1     7 = 5+2     最大含6      7 = 6+1  代码： #include <deque> #include <iostream> #include <conio.h> using namespace std; typedef deque<int> VEC_INT; typedef deque<VEC_INT> VV_INT; //打印 void print_vv(VV_INT &vv);  //n - 最大包含数 //N - 需要拆分的数 //vvec - 输出的数组 void SplitNum(int n,int N,VV_INT &vvec) { 	if(n>N) return ; 	//N 拆分为 N 自己则直接输出 	if(n==N) 	{ 		VEC_INT v; 		v.push_back(n); 		vvec.push_back(v); 		return ; 	} 	//当全拆分为1 的时候 	if(n==1) 	{ 		VEC_INT v; 		for(int i = 0;i<N;i++) 		{ 			v.push_back(1); 		} 		vvec.push_back(v); 		return ; 	} 	//子拆分，拆分 (n,N) -> n+ 【(1,N-n)~(n,N-n)】 	for(int i=1;i<=n;i++) 	{ 		VV_INT vvec1; 		SplitNum(i,N-n,vvec1); 	//	print_vv(vvec1); 		VV_INT::iterator it = vvec1.begin(); 		for(;it!=vvec1.end();it++) 		{ 			it->push_front(n); 			vvec.push_back(*it); 		} 	} 	 } void print_vv(VV_INT &vv) { 	cout << "*************************************" << endl; 	VV_INT::iterator it = vv.begin(); 	for(;it!=vv.end();it++) 	{ 		VEC_INT::iterator it_item = it->begin(); 		for(;it_item!=it->end();it_item++) 		{ 			cout << *it_item << " " ; 		} 		cout << endl; 	} 	cout << "*************************************" << endl << endl;  } void main() { 	int N; 	cout << "\nPlease input a number:"; 	cin >> N ; 	VV_INT vv; 	for(int i=1;i<N;i++) 	{	 		SplitNum(i,N,vv);	 	}	 	print_vv(vv); 	getch(); }

user: user-2
content: // test1.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <vector> using namespace std;  vector<vector<int>> func(int nInput, int nMin) { 	vector<vector<int>> nResult; 	if (nInput == 0) 	{ 		nResult.resize(1); 		return nResult; 	} 	if (nInput < nMin) 	{ 		return nResult; 	} 	if (nInput == nMin) 	{ 		nResult.resize(1); 		nResult[0].push_back(nMin); 		return nResult; 	} 	 	for (int i = nMin; i <= nInput; i++) 	{ 		vector<vector<int>> nTemp = func(nInput-i, i); 		if (nTemp.size() == 0) 		{ 			continue; 		} 		for (int j = 0; j < nTemp.size(); j++) 		{ 			nResult.push_back(nTemp[j]); 			nResult.back().insert(nResult.back().begin(), i); 		} 	} 	return nResult; }   int _tmain(int argc, _TCHAR* argv[]) { 	vector<vector<int>> nR = func(7, 1); 	nR.pop_back(); 	return 0; }     写的很渣 凑合着看 另外 楼主少写了一种情况  7 = 1+3+3

user: user-3
content: 仅供参考//求从Begin到End的正整数中挑出任意个数使其总和为Sum的所有方案 #include <stdio.h> #include <conio.h> int Begin,End,Sum; int j; int o[1000]; long n; void combsum(int b,int e,int s,int d) {     int i;      if (e>s) e=s;     for (i=e;i>=b;i--) {         if ((i+b)*(i-b+1)/2<s) break;         o[d]=i;         if (s-i<=0) {             n++;             printf("%8ld:",n);             for (j=0;j<=d;j++) printf("%d ",o[j]);             printf("\n");         } else {             if (d+1<1000) combsum(b,i-1,s-i,d+1);             else {                 printf("Error:Too deep.\n");                 return;             }         }     } } void main() {     clrscr();     printf("Input Begin,End,Sum:");     scanf("%d,%d,%d",&Begin,&End,&Sum);     n=0L;     combsum(Begin,End,Sum,0);     printf("Total:%ld\n",n);     getch(); }