问题 : 数字拆解
题目描述
给出一个数M,求M通过比M小的数的的加法,有多少种方法。
比如给出的数是6
那么,M可以由
1. 5+1=6
2. 4+2=6
3. 4+1+1=6
4. 3+3=6
5. 3+2+1=6
6. 3+1+1+1=6
7. 2+2+2=6
8. 2+2+1+1=6
9. 2+1+1+1+1=6
10. 1+1+1+1+1+1=6
共10种方法。
输入
一个数M(M小于50)
输出
一个数,表示有多少种方法
样例输入
6
样例输出
10
1 #include<stdio.h> 2 #include<windows.h> 3 int line=0; 4 void fun(int n,int sum,int i){ 5 int a; 6 for(int j=1;j<=i;j++){ 7 a=sum; 8 a=a+j; 9 10 if(n==a){ 11 line++; 12 //Sleep(1000); 13 return; 14 }else{ 15 // Sleep(1000); 16 fun(n,a,j); 17 } 18 } 19 } 20 int main(){ 21 int n,sum; 22 scanf("%d",&n); 23 for(int i=1;i<n;i++){ 24 sum=i; 25 fun(n,sum,i); 26 } 27 printf("%d",line); 28 }