Description
有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。
Input
第一行输入小孩的人数N(N<=64)
接下来每行输入一个小孩的名字(人名不超过15个字符)
最后一行输入W,S (W < N),用逗号","间隔
Output
按人名输出小孩按顺序出列的顺序,每行输出一个人名
Sample Input
5 Xiaoming Xiaohua Xiaowang Zhangsan Lisi 2,3
Sample Output
Zhangsan Xiaohua Xiaoming Xiaowang Lisi
给个图就明白了。先找思路,再打代码。从代码看思路比从思路看代码困难得多。
用String[] name存小孩的名字
用p指向,这些小孩的名字,初始化时p[0]->name[0].....
如果一次数数,D出列了。
这种情况,就让3指向4应该指向的名字。也就是,然后n--,相当于4出列了。
然后继续数,就是对数组的求余过程。假如当前位置时w
那么在往后数s个,就应该是w+s-1%n。注意这里的n是当前队列的人数。
w+s-1%n是p数组的值。假如要取名字,那还是要再加一个步骤,就是name[p[w+s-1%n]];
说一大堆有点难描述,还是看两个图容易看懂