vectorqueue 2024-03-21 20:14 采纳率: 50%
浏览 33

洗牌魔术洗牌魔术c++

洗牌魔术
描述

小张同学自从看了春晚的扑克魔术之后,就迷上了。自己琢磨了一个魔术。把一副牌按照某种洗牌手法处理之后,翻开每一张已经有序了。

比如,3 2 4 1分别代表4张牌。把最后一张牌放到最上面,再把倒数第二个牌放到第二个位置。就变成了1 2 3 4。

小张的魔术秘密是什么呢?其实很简单,最初的牌看似随意,其实是设计好的,只要按照自己记忆好的洗牌方式,最后一定会变成有序的。

小张在寒假苦练10天,终于有所小成,到了学校之后给朋友展示,谁知道朋友要先洗洗牌,小张蒙了,但没办法,硬着头皮故作轻松说,可以。

小张这时候没有办法了,还是按照之前记忆好的洗牌方式处理,比如在上面的例子,把最后一张牌放到最上面,再把倒数第二个牌放到第二个位置。

这样做,肯定是不行的哇。但小张为了拖延时间,疯狂的调换。按照记忆好的洗牌方式,处理了k遍。请你计算出,洗了k次之后的牌,是什么顺序。

输入描述

输出有四行,
第一行为小张实现设计好的扑克牌顺序。
第二行是小张按照记忆好的洗牌方式,处理过的顺序
第三行是,小张同学洗牌之后的顺序。
第四行是小张洗牌k遍。

前三行均为小写字母,长度相同,每个字母只会出现一次.

k的范围是100以内

输出描述

输出一行字符串,代表小张洗牌k遍之后的顺序

用例输入 1

abc
cab
cba
1
用例输出 1

acb
用例输入 2

abcd
bcda
cabd
2
用例输出 2

bdca
提示

样例解释
样例1解释:我们把初始字符串称为s1,经过一次洗牌之后的字符串称为s2.
可以发现,s1的最后一位变成s2的第一位,s1的第一位,变成s2的第二位,s1的第二位变成s2的最后一位。

所以cba这个字符串经过一次洗牌之后,就变成了acb

样例2解释:
经过一次洗牌之后,变成了abdc,经过两次洗牌之后变成了bdca。

数据范围:
字符串长度为2到26

1≤k≤100

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-21 20:15
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    算法1 时间复杂度:$O(kn)$ 刚拿到这道题目的时候竟然不知道应该如何解题,思考了良久终于想到可以通过暴力模拟来解决该问题。也就是把小张洗牌的过程模拟出来,模拟完k遍之后得到最终的结果。
    • 第一遍,偶数位插在奇数位后面,奇数位插在偶数位后面,得到新的顺序;
    • 第二遍,把最后一个元素与第一个元素调换,再把倒数第二个元素和第二个元素调换,得到新的顺序;
    • 第三遍,把最后两个元素放置在前面,把前两个元素放置到后面,得到新的顺序;
    • 第四遍,把最后一个元素放置到最前面,其它元素顺序不变,得到新的顺序;
    • 计算k次之后的顺序即可。 C++ 代码 算法2 时间复杂度:$O(n)$ 在看题解区的时候突然发现大佬们还有优化的空间,只要我们在一遍遍历过程中记录下变换的每个位置就可以只遍历一次,直接算出k次变换之后的位置即可。 C++ 代码
    评论

报告相同问题?

问题事件

  • 创建了问题 3月21日

悬赏问题

  • ¥15 付费求做一个自助抢单插件
  • ¥15 bat批处理,关于数据复制问题
  • ¥50 同步两个不同结果的array中某些属性
  • ¥15 悬赏15远程操控解决问题
  • ¥15 CST复制的模型无法单独修改参数?
  • ¥15 前端页面想做个定时任务,但是使用requestAnimationFrame,setinterval和settimeout都不行
  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题