1.問題描述
給出一個數,將這個數表示爲一系列的正整數之和。求有多少種可能
2.算法思想
分治法,分而治之
第一種:當最大的劃分數爲1的時候只有一種可能 6=1+1+1+1+1+1
第二種:當最大劃分數大於劃分數時候, 是最大劃分數等於劃分數,也就是計算次劃分數的所有可能性
第三種:當最大劃分書等於劃分數時候,計算劃分數的全部可能性
第四種:當最大劃分數小於劃分數的時候,計算此時的所有可能性
3:.算法代碼
<span style="font-size:18px;">#include<stdio.h>
int p(int n,int m){
if(m==1||n==1) return 1;
if(m>n) return p(n,n);
if(m==n) return p(n,m-1)+1;
return p(n,m-1)+p(n-m,m);
}
main(){
int n,s,m;
printf("請輸入一個正整數n\n");
scanf("%d",&n);
printf("請輸入最大加數m\n");
scanf("%d",&m);
s=p(n,m);
printf("數%d的最大劃分數爲%d\n",n,s);
}</span>