面试题-华为(16年)-约瑟夫环:每隔两个数删掉一个数...-4

本文介绍了华为2016年面试中的一道编程题,涉及约瑟夫环问题的解决。通过链表数据结构,解释了如何每隔两个数删除一个数,直至找到最后一个被删除的数的原始下标。提供了输入输出描述、示例及参考代码,适合面试准备和学习交流。
摘要由CSDN通过智能技术生成

这是华为16年的面试题,网上有很多关于此题目的解析,在此我选择了最好理解记忆的一种,分享在此给大家。等会看题目你会发现这道题目其实是约瑟夫环的一个应用,使用数据结构中的链表。由于本人能力有限,中间遇到了不少问题,因此代码中夹杂了一些博主对于该题目的理解。
该部分的代码与解答参考于下面的博客1博客2。源代码中有一些问题,我进行了修改,代码所有权归原作者所有。

除此之外,该面试编程题来自于牛客网,本人分享在此仅供大家学习与交流用,不担负任何法律责任。博文版权归博主所有,转载需注明出处。

问题描述

有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

输入描述:

每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。

输出描述:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值