概述
题目:将一个正整数n表示成一系列的正整数之和:求共有几种划分方法
n=n1+n2+n3+.....+nk (n1>=n2>=n3.......>=1, k>=1)
被称作正整数的一个划分。正整数n可能存在不同的划分,例如正整数6的全部划分为
6=6
6=5+1
6=4+2 6=4+1+1
6=3+3 6=3+2+1 6=3+1+1+1
6=2+2+2 6=2+2+1+1 6=2+1+1+1+1
6=1+1+1+1+1+1
方法:找递推公式:
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int partition(int abc, int max)//max表示划分的正整数中最大的正整数
{
if(abc==1 || max==1)
{
return 1;
}
if(abc<max)
return partition(abc, abc);
if(abc==max)
return partition(abc, abc-1)+1;
if(abc>max)
return partition(abc, max-1)+partition(abc-max, max);//由两部分组成:一部分由max-1表示;另一部分由max表示,可转化成abc-max的表示种类
}
int main()
{
int abc;
while(cin>>abc)
cout<<partition(abc,abc)<<endl;
}
最后
以上就是拉长乌冬面为你收集整理的将一个正整数n表示成一系列的正整数之和,求共有几种划分方法的全部内容,希望文章能够帮你解决将一个正整数n表示成一系列的正整数之和,求共有几种划分方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复