码迷,mamicode.com
首页 > 其他好文 > 详细

回溯3--数的拆分

时间:2017-07-05 09:53:12      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:span   一个   数组   arch   bsp   没有   blog   pre   cout   

回溯3--数的拆分

一、心得

 

二、题目及分析

任意一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和,求总的拆分方法。

这个题目里面原数据数组和标记数组都没有,只有结果数组。

 

//t是轮数也是ans的位数,print里面输出的时候t要减1,因为判断的时候是在下一轮判断的  

三、代码及结果

 1 /*
 2 任意一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和,求总的拆分方法。 
 3 
 4 这个题目里面原数据数组和标记数组都没有,只有结果数组。 
 5 
 6 
 7 */ 
 8 #include <iostream>
 9 using namespace std;
10 
11 
12 int ans[10001]={1};//储存结果数组 
13 int total=0;//方案总数 
14 int n;
15 
16 void print(int t){
17     total++;
18     cout<<"<"<<total<<">"<<": ";
19     cout<<n<<"=";
20     for(int i=1;i<t;i++){
21         cout<<ans[i]<<"+";
22     } 
23     cout<<ans[t];
24     cout<<endl;
25 } 
26 
27 //t是轮数也是ans的位数,print里面输出的时候t要减1,因为判断的时候是在下一轮判断的  
28 void search(int s,int t){//t是轮数 
29     if(s==0) print(t-1);
30     for(int i=ans[t-1];i<=s;i++){
31         if(i<n){//这句话限制7=7的情况 
32             ans[t]=i;
33             search(s-i,t+1);
34             //上一步s-i,s的值没有改变,这一步不用回溯 
35         }
36     }
37 } 
38 
39 int main(){
40     cin>>n;
41     search(n,1);
42     cout<<total<<endl;
43     return 0;
44 } 

技术分享

回溯3--数的拆分

标签:span   一个   数组   arch   bsp   没有   blog   pre   cout   

原文地址:http://www.cnblogs.com/Renyi-Fan/p/7119275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!