整数划分问题
题目1:求整数划分个数
题目2:求整数划分
例:整数3,划分如下:
3
2+1
1+1+1
有3个划分结果。
求划分方法和个数:
#include<iostream>
using namespace std;
int cnt=0;
int a[100];
int ans=0;void P(int n,int m){if(n==0){for(int i=0;i<cnt;i++){cout<<a[i];if(i<cnt-1){cout<<"+";}} cout<<endl;ans++;return;}// 从1到max的范围内寻找可能的划分 for(int i=min(n,m);i>=1;i--){a[cnt++]=i;//选择iP(n-i,i);cnt--;//回溯 }
}int main(){int n;cout<<"请输入要划分的整数:";cin>>n;cout<<"划分的方法如下:"<<endl;P(n,n);cout<<"划分的个数:"<<ans<<endl;return 0;
}
思路:从1到max选择一个数,以该数为最大值进行划分,找到一个划分结果。