递归之整数拆分

 

(1)整数拆分(用递归)。

 

     把一个正整数n拆分为小于等于n的正整数之和。按递减排列。

     例如n=6:

     6

     5+1

     4+2

     4+1+1

     3+3

     3+2+1

     3+1+1+1

     2+2+2

     ...

     1+1+1+1+1+1

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 int countt=0;
 4 int t[100];
 5 //h5,h1分别表示售货员手上5毛和1块的张数,leaved5和leaved1分别表示未上车的乘客
 6 void onsail(int  h5,int h1,int leaved5,int leaved1,int i)
 7 { 
 8  if(leaved1>=0&&leaved5>=0&&h5>=h1)// 保证进入递归的大条件是未上的乘客》=0和售货员手上的5毛大于1块的张数
 9  {
10        if(leaved5!=0||leaved1!=0)//保证未上车的人数>0
11   {
12           t[i]=5;
13       onsail(h5+1,h1,leaved5-1,leaved1,i+1);
14           t[i]=1;
15       onsail(h5,h1+1,leaved5,leaved1-1,i+1);
16   }
17         //这时所有乘客都上了车,且是符合题目要求的
18   //if(leaved5==0&&leaved1==0)此时已经满足了所有乘客都上了车,此条件多余
19  else
20  {
21            countt++;
22        for(int j=0;j<i;j++)
23           cout<<t[j];
24           cout<<endl;
25  }
26  }
27 }
28 int main()
29 {
30    int n;
31    cin>>n; 
32    onsail(0,0,n,n,0);
33    cout<<countt;
34 }

 

 

posted @ 2013-12-22 22:02  it__橘子  阅读(881)  评论(0)    收藏  举报