经典编程题——折纸问题
眼过千遍不如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;
}
朋友们可以评论一下这是什么思路得解法
经典编程题——折纸问题相关推荐
- csharp进阶练习题:GrandChild养成了叔叔的习惯【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
csharp进阶练习题:GrandChild养成了叔叔的习惯[难度:2级]: 爷爷总是要求他的女儿("妈妈")和儿子("叔叔")养成一些习惯,他在一篇论文中为他 ...
- java 初级编程题_java基础经典编程题
java基础经典编程题 Monkey_peach代码 package com.sailor.game; /** * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第 ...
- JAVA50道经典编程题
加强对基础知识的巩固提升,拓展逻辑思维. JAVA50道经典编程题: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不 ...
- python经典编程题分别取个位十位百位
python经典编程题分别取个位十位百位 问题描述: 对于输入的两个两位数正整数a.b,将a的十位和个位依次放到c的十位和千位,将b的十位和个位依次放到c的百位和个位上. 输入:a,b两个整数 输出: ...
- JavaSE经典编程题
JavaSE经典编程题 作者:田超凡 版权所有,转载请注明原作者,仿冒侵权必究法律责任 [程序1] TestRabb ...
- csharp高级练习题:Codewars风格排名系统【难度:4级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
csharp高级练习题:Codewars风格排名系统[难度:4级]: 写一类称为用户被用来计算用户将通过一个类似于Codewars用途排名系统进展的量. 商业规则: 用户开始于秩-8,可以进步一路8. ...
- csharp基础练习题:noobCode 03:检查这些信件...查看是否在“字符串1”的信件出现在“字符串2”【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
csharp基础练习题:noobCode 03:检查这些信件-查看是否在"字符串1"的信件出现在"字符串2"[难度:1级]: 编写一个函数,检查第二字符串中的字 ...
- csharp基础练习题:小数的位数【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
csharp基础练习题:小数的位数[难度:1级]: 确定在一个无符号整数的十进制数字号码.例如,图9是一个数字,66具有2位和128685具有6位数字.要小心,以避免溢出/下溢. 编程目标: publ ...
- csharp基础练习题:产品和LCMS之间的差异总和【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
csharp基础练习题:产品和LCMS之间的差异总和[难度:1级]: 在此习题您需要创建一个函数,非负整数对的二维数组/列表并返回的所有"保存",你可以得到[LCM(HTTPS的总 ...
最新文章
- 爆改古董卡西欧计算器!能联网、能聊天,「作弊神器」只要150块
- node.js path
- PyTorch 0.4新版本 升级指南 no_grad
- catia曲面扫掠命令详解_Catia曲面基础与工程实践 3.2 扫掠曲面
- linux网络保存退出,linux编辑文件后如何保存退出
- mysql动态代理_超全MyBatis动态代理详解(绝对干货)
- 9.6 LSMW程序删除操作手册-录屏
- 越狱后必装软件_iOS 13全系统越狱详细教程疑难解答
- python编写窗口怎么清除内容_如何删除或销毁tkinter中的标签?
- 中小型企业网络构建(思科)
- conda安装本地whl文件
- 烧写linux系统到盒子,在Linux命令行中将礼品包装在盒子中
- cv2.resize()函数不同插值方法比较
- Arcgis(二) 绘制区域划分示意图——以重庆五大功能区为例
- 九宫格六边形html,六边形拼图
- 微服务中的服务发现是什么?
- 采购订单和 采购申请 的表
- 判断一个多边形的凸凹性
- 乖离率背离公式_股价偏离率是什么 BIAS指标计算公式-BIAS-技术指标-股票入门基础知识学习网...
- Bug bounty自学笔记1(常用工具)
热门文章
- 解决阿里云OSS使用URL无法访问图片
- 买房应该全款还是贷款
- realme有升级到android10的,RealmeX/Q将升级安卓10底层刷机包
- 【号外】联手腾讯故宫试水“互联网+”
- gif透明背景动画_常用的设计文件格式——jpg、png、gif、psd、ai、cdr、tiff
- Zemax学习笔记(11) - 变焦镜头设计实例
- Android暗黑模式
- 29岁,从绝望崩溃到年入50万:这个技能,决定你5年后的人生!
- 淘宝/天猫图片识别商品接口,1688图片识别商品API接口
- compare比对工具