C语言解决整数划分问题

根据整数划分的规律,可以得出下面公式

递归公式:

公式

q(n, m) 表示对整数n进行划分,最大数不超过m的划分个数。

同时,本人在做算法题时,遇到一个类似整数划分的问题,及:对整数n进行划分,其划分的数的个数不超过m个,求其划分个数。设解决这个问题的方法为p(n, m)。在求解过程中,我发现:对整数n进行划分,最大数不超过m的划分个数=:对整数n进行划分,其划分的数的个数不超过m个,求其划分个数。即:q(n, m) = p(n, m),所以求解这个问题的时候,可以通过求解q(n, m)来实现。

代码:

#include <stdio.h>
int q(int n, int m) {
    
    
	if((n<1)||(m<1)) return 0;
	if((n==1)||(m==1)) return 1;
	if(n < m) return q(n,n);
	if(n==m) return 1 + q(n,n-1);
	return q(n,m-1) + q(n-m,m);
}
int main()
{
    
    
    int n,result;
    scanf("%d",&n);
    result = q(n,n);
    printf("Result:%d",result);
    return 0;
}

Guess you like

Origin blog.csdn.net/weixin_43394832/article/details/105314301