博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知乎小米变相约瑟夫环面试题微软解法julia代码
阅读量:7304 次
发布时间:2019-06-30

本文共 1281 字,大约阅读时间需要 4 分钟。

hot3.png

原题: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手机没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组 。

微软君给的算法: 取一个1~n的数组,这里为了说明取n=5。按照题目中的规则变换,得到数组:[1 3 5 4 2],将该数组下标与值互换得到[1 5 2 4 3],即为答案。解释:[1 3 5 4 2]的意义是,经过变换,原数组中3号位置的数字现在2号槽,原数组中5号位置的数字现在3号槽... 现在已知变换后的槽存放的是1~n,故只需将下标与值互换即可得到待求数组。

# julia代码 变相约瑟夫环。知乎上一个小米面试题的微软解法(细节去知乎找找看)# 用数字构成顺序数组function make_array(n)    array = Int32[]    for i = 1:n        push!(array, i)    end    return arrayend# 构造中间数组,取一个结尾存一个function count_mid_array(array)    mid_array = Int32[]    while length(array) > 1 # 长度大于1        t1 = splice!(array, 1) # 删除首个        push!(mid_array, t1) # 插入中间组        t2 = splice!(array, 1) # 再删除首个        push!(array, t2) # 插入原组结尾    end    push!(mid_array, array[1]) # 最后剩下那个插入中间组    return mid_arrayend# 将中间数组 转换为 结果数组function trans_array(n, new_array)    fin_array = Int32[]    for i = 1:n        idx = 0 # 我不知道julia的同时返回元素值和索引的方法,就自己构造索引了        for a in new_array            idx+=1 # 索引增值            if i == a                push!(fin_array, idx) # 提取索引            end        end    end    return fin_arrayend# 测试方法入口function joseph()    n = 12    sou = make_array(n)    println(sou)    mid = count_mid_array(sou)    println(mid)    fin = trans_array(n, mid)    println(fin)endjoseph()

 

转载于:https://my.oschina.net/raddleoj/blog/1942158

你可能感兴趣的文章
Object类对线程的支持----等待与唤醒
查看>>
硬盘串口和并口的区别
查看>>
java multithreading server example
查看>>
自动分发神器搭建kickstart
查看>>
我的友情链接
查看>>
mysql主从复制,半同步,主主复制架构的实现
查看>>
keepalived通过vrr_script实现高可用性案例分析
查看>>
寓言四则
查看>>
让那些设计师在没有斗志的时候读读
查看>>
SQLServer2008 数据库 开启 远程 连接 设置
查看>>
嵌入式开发交叉调试技术简介
查看>>
JavaScript基础
查看>>
C#重点内容之:接口(interface)(一)网络初级示例
查看>>
dojo表格操作的简单示例(建立表格)
查看>>
div辅助线【完整版】
查看>>
ZZULIOJ 1898: 985的数字难题 【水题】
查看>>
移动tempdb导致数据库服务不能启动
查看>>
[BEC][hujiang] Lesson04 Unit1:Working life ---Reading + Listening &Grammar & Speaking
查看>>
AspNet GridView Excel 下载 Excel 导出
查看>>
习题整理,二叉树后续遍历得到指定节点到其祖先的路径
查看>>