一张纸横着对折 N 次 输出凹凸的序列
思路解析:本题涉及到的折痕凹凸状态比较难统计,我们从最基本的情况开始分析:
- 对折 1 次,得到的序列为:[0, 1, 0],即初始状态为平的,折痕状态为凸,最终状态为平的。
- 对折 2 次,得到的序列为:[0, 1, 0, 1, -1, 0],即初始状态为平的,第一次折痕为凸,经过第二次折痕后,变为凹,最终状态为平的。
根据以上规律,我们可以得到对于第 n 次对折,最终得到的序列是由对于第 n-1 次对折的序列中的每个数字,在其前面加上 0 和 1,和在其后面加上 1 和相反数得到的。加上 0 是因为初始状态为平的,加上 1 是因为每次对折都会产生一个折痕,加上相反数是因为折痕后产生的凹凸状态相反。 因此,我们可以用类似于递归的方式,依次求出对于 1~n 次对折产生的序列,最后输出 n 次对折的序列即可。
def fold_paper(n):
result = [0] # 初始化序列为 0,表示初始状态为平的
for i in range(n):
tmp = [] # 临时存储折痕序列
for num in result:
tmp.append(num) # 先将上一次的序列赋值到临时序列中
tmp.append(1) # 加入折痕
tmp.append(0 - num) # 加入折痕后的凹凸状态
result = tmp # 更新序列
return result
n = int(input("请输入对折次数:"))
res = fold_paper(n)
print(res)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论