报数游戏
n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来几号的那位
思考:1、围成一圈?怎么围?
2、退出圈子?怎么实现。
3、怎么判断最后留下的是几号?
1 |
|
1、围成一圈需实现的结果就是当最后一人报数过后,到第一人报数。根据需求,列出循环,判断当循环到最后一个人的时候,重新赋值循环变量,使其重新循环到第一人。
注意:这将会导致无限循环,需想办法跳出循环。将循环变量重新赋值后,还会执行i++,再而才会进行循环条件判断,是否继续进行循环。所以要时i++后的值,指向第一个人,即i==0,所以i应赋值为-1。否则将会跳过第一个人执行循环体。
2、退出圈子,需实现的需求就是下次报数不再进行报数,或许会想到删除,将报到3的人踢出圈子,不过数组实现删除却有些麻烦,或者换成链表组成圈子,实现删除操作将会简单很多。嗯》》》不如换个思考方式,报到3的人,为他做一个标记,循环报数对有标记的人就不用报数。虽并未实际“退出圈子”,却也实现了需求。对于问题的实际需求,需灵活判断。找到效率更高的算法。
3、对一圈的人,顺序排序,当退出的人(标记的人)达到总人数减一的时候,也就是只剩下一人的时候,循环全部人,查找其中未被标记的输出即可。
动画演示
–c
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J's Blog!
评论
WalineLivere







