问题描述:
已知n个人围坐在一张圆桌周围,从编号为1的人开始报数,数到m的那个人出列。下一个人从1开始报数,数到m的人继续出列,以此类推直至全部人出列。求出列顺序?
解决方案:
1、最简单明了的办法就是用循环链表存储这n个人。数到m的人出列,只需将该结点从链表里剔除即可,然后继续往后报数,直到链表只剩下一个结点时结束。
具体代码如下:
2、第二种办法就是用数组存储,难度将大大增加。但思路还是跟链表有点相似的。首先将要出列的元素输出,然后将它后面的所有元素都向前移一位,将已出列的元素填充掉。然后再向后找下一个要出列的元素。
注意:当搜索到最后一个元素a[i]以后,用求余"%"功能,让数组和循环链表一样实现循环。另外,每次输出一个元素并把它填充掉以后,数组的总元素个数i会减一。
具体代码如下:
理解代码最好的方式就是举具体的例子,我们假设n=7,m=3,求出列顺序,代码的实现如下:
(下图表示第二个for循环的执行过程,每一行表示执行一次循环)
转载请注明出处,谢谢!(原文链接:http://blog.csdn.net/bone_ace/article/details/41213215)