这是华为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]进行计算。