006:简单的整数划分问题

终于可以AC了

#include<iostream>
#include<sstream>
#include<vector>
#include<string>
#include<algorithm>
//#include<map>
using namespace std;
 
int Fun(int n,int m)
{
	if(n==1||m==1)
	{
		return 1;
	}
	else if(n<m)
	{
		return Fun(n,n);
	}
	else if(n==m)
	{
		return 1+Fun(n,m-1);
	}
	else if(n>m)
	{
		return Fun(n-m,m)+Fun(n,m-1);
	}
}
 
int main()
{
	int inputnum=0;
	
	while(scanf("%d",&inputnum)!=EOF)
	{
		cout<<Fun(inputnum,inputnum)<<endl;
	}
	
	return 0;
}

by 2020.03.16更新前

代码有问题,不能这样搞啊

描述

将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。

输入

标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。

输出

对于每组测试数据,输出N的划分数。

样例输入

5

样例输出

7

提示

5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1

#include<iostream>
#include<sstream>
#include<vector>
#include<string>
#include<algorithm>
//#include<map>
using namespace std;

vector<string> Fun1(vector<string> vecstrsin)
{
	vector<string> vecstrsret;

	//每一个结果后面添加"+1"
	int i=0,j=0,itemp=0;
	for(i=0;i<vecstrsin.size();i++)
	{
		string strtemp=vecstrsin[i]+"+1";
		vecstrsret.push_back(strtemp);
	}

	//每一个结果中每一项+1
	for(i=0;i<vecstrsin.size();i++)
	{
		if(vecstrsin[i].find('+')==-1)
		{
			itemp=atoi(vecstrsin[i].c_str());
			itemp++;
			stringstream ss;
			ss<<itemp;
			vecstrsret.push_back(ss.str());
			continue;
		}
		else
		{
			int iposbeg=0;
			int iposlast=vecstrsin[i].rfind('+');
			string strtemp=vecstrsin[i];
			string strsin=vecstrsin[i];
			for(j=0;j<vecstrsin[i].length();j++)
			{
				if(vecstrsin[i][j]=='+')
				{
					itemp=atoi(strsin.substr(iposbeg,j-iposbeg).c_str());
					itemp++;
					stringstream ss;
					ss<<itemp;
					strsin.replace(iposbeg,j-iposbeg,ss.str());
					strtemp=vecstrsin[i];
					vecstrsret.push_back(strsin);
					strsin=vecstrsin[i];
					iposbeg=j+1;
				}

				if(iposlast==j)
				{
					itemp=atoi(strsin.substr(j+1,strsin.length()-iposlast-1).c_str());
					itemp++;
					stringstream ss;
					ss<<itemp;
					strsin.replace(j+1,strsin.length()-j-1,ss.str());
					strtemp=vecstrsin[i];
					vecstrsret.push_back(strsin);
					strsin=vecstrsin[i];
					break;
				}
			}
		}
	}
	return vecstrsret;
}

vector<string> FunDel(vector<string> vecstrsret)
{
	sort(vecstrsret.begin(),vecstrsret.end());
    vecstrsret.erase(unique(vecstrsret.begin(), vecstrsret.end()), vecstrsret.end());

	return vecstrsret;
}

bool Comp(const int &a, const int &b)
{
	return a>b;
}

//bool CompStr(const string &x,const string &y)  //&符號不能少
//{
//  return x>y;
//}

vector<string> FunSort(vector<string> vecstrsret)
{
	for(int i=0;i<vecstrsret.size();i++)
	{
		vector<int> vecints;
		int iposbeg=0,inumret=0,itemp=0;
		string strtemp=vecstrsret[i];
		for(int j=0;j<vecstrsret[i].length();j++)
		{
			int iposlast=vecstrsret[i].rfind('+');
			
			if(vecstrsret[i][j]=='+')
			{
				itemp=atoi(vecstrsret[i].substr(iposbeg,j-iposbeg).c_str());
				vecints.push_back(itemp);
				iposbeg=j+1;
			}
			
			if(iposlast==j)
			{
				itemp=atoi(vecstrsret[i].substr(j+1,vecstrsret[i].length()-iposbeg).c_str());
				vecints.push_back(itemp);
				break;
			}
		}	

		if(vecints.size()>1)
		{
			sort(vecints.begin(),vecints.end(),Comp);
			stringstream ss;
			ss<<vecints[0];
			strtemp=ss.str();
			for(int k=1;k<vecints.size();k++)
			{
				stringstream ss1;
				ss1<<vecints[k];
				string str1=ss1.str();
				strtemp=strtemp+"+"+ss1.str();
			}
			vecstrsret[i]=strtemp;
		}
	}

	return vecstrsret;
}

int main()
{
	int inputnum=0;
	
	while(scanf("%d",&inputnum)!=EOF)
	{
		vector<string> vecstrsret,vecstrsin;
		vecstrsin.push_back("1");
		for(int i=2;i<=inputnum;i++)
		{
			vecstrsin=Fun1(vecstrsin);
			vecstrsin=FunDel(vecstrsin);
		}
		
		vecstrsret=vecstrsin;
		vecstrsret=FunSort(vecstrsret);
		vecstrsret=FunDel(vecstrsret);
		
//		sort(vecstrsret.begin(),vecstrsret.end(),CompStr);
		
//		for(int j=0;j<vecstrsret.size();j++)
//		{
//			if(j==(vecstrsret.size()-1))
//				cout<<vecstrsret[j]<<endl;
//			else
//				cout<<vecstrsret[j]<<",";
//		}
		
		cout<<vecstrsret.size()<<endl;
		
	}
	
	return 0;
}

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页