递归之整数拆分
(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 }

浙公网安备 33010602011771号