• 整数划分问题并显示每一种划分形式


    #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()
    {
    	int n;
    	cin>>n;
    	set<multiset<int>> allDivision;
    	allDivision = GetAllIntDivision(n);
    	//输出结果
    	int i = 0;
    	for(set<multiset<int>>::iterator iter = allDivision.begin();iter != allDivision.end();iter++)
    	{
    		cout<<"第"<<++i<<"种划分: ";
    		copy((*iter).begin(),(*iter).end(),ostream_iterator<int>(cout," "));
    	    cout<<endl;
    	}
    	return 0;
    }

  • 相关阅读:
    JAVA常见算法题(二十六)
    JAVA常见算法题(二十五)
    springBoot框架的一些概念
    js延时函数setTimeout
    JAVA常见算法题(二十四)
    JAVA常见算法题(二十三)
    JAVA常见算法题(二十二)
    JAVA常见算法题(二十一)
    JAVA常见算法题(二十)
    JAVA常见算法题(十九)
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7255697.html
Copyright © 2020-2023  润新知