眼过千遍不如coding一遍,简单记录一下笔试题

题目描述:

请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up"。

分析及测试用例

假如沿着上往下折,所以折痕从下往上数依次为:
1:{“down”}
2:{“down”,“down”,“up”}
3:{“down”,“down”,“up”,“down”,“down”,“up”,“up”}
因为从上往下折,每次折的时候,中间折痕是down
每次折都是在往相反的方向复刻上一折的折痕

思路:

因为要求输出字符串数组,所以操作不好操作,可以先基于1,-1操作,最后在遍历一遍相应的替换即可;
每次中间 “down” 的位置依次为2的n次方
数组的第一个位置为1(down),从第二次开始,每次与2的n次方与左边值等距离的右边值为左边值得相反数,递归求解即可

coding

void getFold(int index,int n,vector<int> vec)  //先得到int数组得目的就是整数还有个取反操作
{if (n >= 1){vec[index] = 1;   //每次折痕的位置都为1(down)int newindex = 2 * index + 1;  //下一次折纸得位置for (int i = 0;i<index;i++){vec[index + i] = vec[index - i];  //折纸两侧的折痕相反}getFold(newindex, n - 1, vec);}
}
long long getnum(int n)   //折n次得多少折痕
{long long x = 1;while (n--){x *= 2;}return x-1;
}
vector<string> foldPaper(int n)  //遍历int数组,得到string数组
{int sum = static_cast<int>(getnum(n));vector<int> vec(sum);vector<string> vecstr(sum);getFold(0, n, vec);for (auto&x:vec){if (x == 1){vecstr.emplace_back("down");}else{vecstr.emplace_back("up");}}return vecstr;
}

其他解法:

void esayFinds(int n,bool isdown,vector<string> &vec)
{if (n == 0)  return;esayFinds(n - 1, true,vec);if (isdown){vec.emplace_back("down");}else{vec.emplace_back("up");}esayFinds(n - 1,false, vec);
}vector<string> foldPaper(int n)
{vector<string> vec;esayFinds(n, true,vec);return vec;
}

朋友们可以评论一下这是什么思路得解法

经典编程题——折纸问题相关推荐

  1. csharp进阶练习题:GrandChild养成了叔叔的习惯【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp进阶练习题:GrandChild养成了叔叔的习惯[难度:2级]: 爷爷总是要求他的女儿("妈妈")和儿子("叔叔")养成一些习惯,他在一篇论文中为他 ...

  2. java 初级编程题_java基础经典编程题

    java基础经典编程题 Monkey_peach代码 package com.sailor.game; /** * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第 ...

  3. JAVA50道经典编程题

    加强对基础知识的巩固提升,拓展逻辑思维. JAVA50道经典编程题: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不 ...

  4. python经典编程题分别取个位十位百位

    python经典编程题分别取个位十位百位 问题描述: 对于输入的两个两位数正整数a.b,将a的十位和个位依次放到c的十位和千位,将b的十位和个位依次放到c的百位和个位上. 输入:a,b两个整数 输出: ...

  5. JavaSE经典编程题

                                              JavaSE经典编程题 作者:田超凡 版权所有,转载请注明原作者,仿冒侵权必究法律责任 [程序1] TestRabb ...

  6. csharp高级练习题:Codewars风格排名系统【难度:4级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp高级练习题:Codewars风格排名系统[难度:4级]: 写一类称为用户被用来计算用户将通过一个类似于Codewars用途排名系统进展的量. 商业规则: 用户开始于秩-8,可以进步一路8. ...

  7. csharp基础练习题:noobCode 03:检查这些信件...查看是否在“字符串1”的信件出现在“字符串2”【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:noobCode 03:检查这些信件-查看是否在"字符串1"的信件出现在"字符串2"[难度:1级]: 编写一个函数,检查第二字符串中的字 ...

  8. csharp基础练习题:小数的位数【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:小数的位数[难度:1级]: 确定在一个无符号整数的十进制数字号码.例如,图9是一个数字,66具有2位和128685具有6位数字.要小心,以避免溢出/下溢. 编程目标: publ ...

  9. csharp基础练习题:产品和LCMS之间的差异总和【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:产品和LCMS之间的差异总和[难度:1级]: 在此习题您需要创建一个函数,非负整数对的二维数组/列表并返回的所有"保存",你可以得到[LCM(HTTPS的总 ...

最新文章

  1. 爆改古董卡西欧计算器!能联网、能聊天,「作弊神器」只要150块
  2. node.js path
  3. PyTorch 0.4新版本 升级指南 no_grad
  4. catia曲面扫掠命令详解_Catia曲面基础与工程实践 3.2 扫掠曲面
  5. linux网络保存退出,linux编辑文件后如何保存退出
  6. mysql动态代理_超全MyBatis动态代理详解(绝对干货)
  7. 9.6 LSMW程序删除操作手册-录屏
  8. 越狱后必装软件_iOS 13全系统越狱详细教程疑难解答
  9. python编写窗口怎么清除内容_如何删除或销毁tkinter中的标签?
  10. 中小型企业网络构建(思科)
  11. conda安装本地whl文件
  12. 烧写linux系统到盒子,在Linux命令行中将礼品包装在盒子中
  13. cv2.resize()函数不同插值方法比较
  14. Arcgis(二) 绘制区域划分示意图——以重庆五大功能区为例
  15. 九宫格六边形html,六边形拼图
  16. 微服务中的服务发现是什么?
  17. 采购订单和 采购申请 的表
  18. 判断一个多边形的凸凹性
  19. 乖离率背离公式_股价偏离率是什么 BIAS指标计算公式-BIAS-技术指标-股票入门基础知识学习网...
  20. Bug bounty自学笔记1(常用工具)

热门文章

  1. 解决阿里云OSS使用URL无法访问图片
  2. 买房应该全款还是贷款
  3. realme有升级到android10的,RealmeX/Q将升级安卓10底层刷机包
  4. 【号外】联手腾讯故宫试水“互联网+”
  5. gif透明背景动画_常用的设计文件格式——jpg、png、gif、psd、ai、cdr、tiff
  6. Zemax学习笔记(11) - 变焦镜头设计实例
  7. Android暗黑模式
  8. 29岁,从绝望崩溃到年入50万:这个技能,决定你5年后的人生!
  9. 淘宝/天猫图片识别商品接口,1688图片识别商品API接口
  10. compare比对工具