算法题目
- 如果只是给了题目没有示例,那其实相对有一定难度的,这个示例给了我们一个更加可视化的思路,当我们以这样的形式展现出来,会发现其中的规律。
算法分析
针对这个问题:
-
任何一种算法,我们首先尽可能的建立相应的数学模型,这里的数学模型并不是说需要多么高大上,而是把所需解决的问题转化为数学问题,类似于一种从具体到抽象的过程。
-
我们根据上面的示例可以发现:比如对整数6进行划分,我们在每次划分时,都分为两个部分,第一个数为一个部分,其余的为第二个部分,从6开始第一部分依次是6,5,4,3,2,1,那么第二部分就是(6-6),(6-5),(6-4),(6-3),(6-2),(6-1)的且不超过相应的第一部分的划分。
具体分析如下:
代码实现
#include<stdio.h>
int Divinteger(int n,int m)
{
if(n==1||m==1)
return 1;
else if(n<m)
return Divinteger(n,n);
else if(n==m)
return 1+Divinteger(n,n-1);
else
return Divinteger(n,m-1)+Divinteger(n-m,m);
}
int main()
{
int n,s; //n表示想要划分的整数 s表示该整数划分的种数
printf("请输入一个正整数n:\n");
scanf("%d",&n);
s=Divinteger(n,n);
printf("该整数%d一共有%d种划分!\n",n,s);
return 0;
}
结果示例
- 示例一
- 示例二
- 示例三