首页 > 代码库 > 递归实现数字拆分
递归实现数字拆分
1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<vector> 5 #include<cmath> 6 #include<set> 7 using namespace std; 8 9 void splitnum(int n, int k, int &way, vector<int> ans) //对n进行拆分,拆分数的最小值为k10 {11 if((n>=k && n<2*k) || n==0)12 {13 way++;14 if(n!=0)15 ans.push_back(n);16 17 cout<<"way "<<way<<":"<<endl;18 for(unsigned j=0; j<ans.size(); j++)19 cout<<ans[j]<<" ";20 cout<<endl;21 22 return;23 }24 25 for(int i=k; i<=n; i++)26 {27 ans.push_back(i);28 29 if(n-i>=i || n-i==0)30 splitnum(n-i, i, way, ans);31 32 ans.pop_back();33 34 }35 }36 37 int main()38 {39 int T,n; 40 cin>>T;41 42 for(int i=0; i<T; i++)43 {44 cin>>n;45 int way=0;46 splitnum(n, 1, way, vector<int>());47 cout<<way<<endl;48 }49 50 return 0;51 }
代码中包含了拆分的结果显示部分,题目中只需输出拆分种类数即可,对于给出的三个测试样例结果正确,其他结果有待验证,并且用递归实现非常耗时,提交后出现TLE。
运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。