step表示當前剩餘的數須要分紅的份數;把n分紅k份,
只需第一個數等於i,計算從i等於1一直到i等於n/k,而後
把剩餘的n-i分紅k-1份的種類數.
front爲剩餘的要劃分的數的前一個數,每次i從front
開始一直到n/step結束,這樣才能保證獲得的劃分方式是
不遞減的,才能保證不會有重複的狀況產生.算法
1 #include<stdio.h> 2 #include<string.h> 3 int ans=0; 4 void dfs(int front, int n, int step){ 5 if(step==1){ 6 ans++; 7 return; 8 } 9 for(int i=front; i<=n/step; i++){ 10 dfs(i, n-i, step-1); 11 } 12 } 13 int main(){ 14 int n; 15 scanf("%d",&n); 16 for(int i=1;i<=n;i++){ 17 dfs(1,n,i); 18 } 19 printf("%d",ans); 20 return 0; 21 }