您的位置:首页 > 其它

整数划分问题(递归策略)

2006-11-28 21:28 253 查看
下午写了一下整数划分问题,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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: