1-1-折纸问题

 1 /*
 2     题目描述:
 3         请把纸条竖着放在桌子上,然后从纸条的下边向上方对折,压出折痕后再展开。此时有1条折痕,
 4         突起的方向指向纸条的背面,这条折痕叫做“下”折痕 ;突起的方向指向纸条正面的折痕叫做“上”折痕。
 5         如果每次都从下边向上方对折,对折N次。请从上到下计算出所有折痕的方向。
 6         给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".
 7         测试样例:
 8             1
 9             返回:["down"]
10 */
11 /*
12     使用递归实现:
13     折叠n次时的折痕 等于 折叠n-1次时的折痕+“down”+折叠n-1次时的折痕的逆的反
14       n = 1时,折痕为:下;
15     则n = 2时,折痕为:下 下 上;
16       n = 3时,折痕为:下下上 下 下上上;
17 */
18 
19 #include <iostream>
20 #include <vector>
21 #include <string>
22 using namespace std;
23 
24 vector<string> foldPaper(int n){
25     vector<string> fp;
26     if (n == 1){
27         fp.push_back("down");
28         return fp;
29     }
30     vector<string> fold = foldPaper(n-1);
31     for (int i = 0; i < fold.size(); i++)
32         fp.push_back(fold[i]);
33     fp.push_back("down");
34     for (int i = fold.size()-1; i >= 0; i--){
35         if (fold[i] == "down")
36             fp.push_back("up");
37         else
38             fp.push_back("down");
39     }
40     return fp;
41 }
42 
43 int main(){
44     vector<string> result;
45     result = foldPaper(4);
46     for (int i = 0; i < result.size(); i++)
47         cout << result[i] << endl;
48     return 0;
49 }

 

posted @ 2015-10-16 11:06  KindaCrazy  阅读(363)  评论(0编辑  收藏  举报