首页 > 代码库 > 整数划分问题并显示每一种划分形式
整数划分问题并显示每一种划分形式
#include<iostream> #include<algorithm> #include<iterator> #include<set> using namespace std; /* *整数划分问题并显示每一种分法 */ set<multiset<int>> GetAllIntDivision(int n) { set<multiset<int>> allDivision; if(1==n) { multiset<int> aa; aa.insert(1); allDivision.insert(aa); } else { set<multiset<int>> iniDivision = GetAllIntDivision(n-1); for(set<multiset<int>>::iterator iter = iniDivision.begin();iter != iniDivision.end();iter++) { //添加后缀项 multiset<int> inimul; inimul = *iter; inimul.insert(1); allDivision.insert(inimul); //添加累加项 /*inimul = *iter;*/ for (multiset<int>::iterator it = (*iter).begin();it!=(*iter).end();++it) { multiset<int>::iterator iit = it; inimul = *iter; while((++iit)!=(*iter).end()&&(*it)==(*iit)) { iit = (++it); } inimul.erase(inimul.find(*it)); inimul.insert((*it)+1); allDivision.insert(inimul); } } } return allDivision; } int main() { set<multiset<int>> allDivision; allDivision = GetAllIntDivision(6); //输出结果 for(set<multiset<int>>::iterator iter = allDivision.begin();iter != allDivision.end();iter++) { copy((*iter).begin(),(*iter).end(),ostream_iterator<int>(cout," ")); cout<<endl; } return 0; }
整数划分问题并显示每一种划分形式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。