下午写了一下整数划分问题,Debug了很久,老是输出得不到预期得结果,。直到将每个划分步骤保存到数组中才解决这个问题。总算通过了!so Happy! 代码如下,(懒得简化了)
/*问题描述:
// 将一个正整数n表示成一系列正整数之和,
// n = n1 + n2 + ... + nk ( 其中, n1 >= n2 >= ... >= nk , k >= 1 )
// 正整数n的一个这种表示称为正整数n的一个划分。
// 正整数n的不同的划分个数称为正整数n的划分数。
*/
- #include<iostream>
- #include<iomanip>
- using namespace std;
- static int Len=0;
- static int Count=0;//划分次数
- int main(){
- void Process(int sum,int total,int b,int*Result,int Len);
- const int MAX=1000;
- int MP[MAX]={0};//保存划分结果
- int Len=0;
- int num;
- cin>>num;
- Process(num,0,num,MP,Len);
- cout<<num<<" 的划分个数为 "<<Count<<endl;
- return 0;
- }
- void Print(int *Result,int Len){
- cout<<"第 "<<setw(2)<<Count<<"个划分: ";
- for(int i=0;i<Len;i++)
- cout<<Result[i]<<" ";
- cout<<endl;
- }
- void Process(int sum,int total,int b,int* Result,int Len){
- if(total==sum){
- Count++;
- Print(Result,Len);//输出这个划分
- return;
- }
- else if(total<sum){
- for(int i=1;i<=b;i++){
- if(total+i<=sum){
- Result[Len]=i;
- Process(sum,total+i,i,Result,Len+1);
- }
- }
- }
- }