题意理解:
一排士兵排成一行,依次1212报数,报到2的人出列,剩余士兵靠拢排成新的一行。再依次123123报数,报到3的人出列,剩余士兵靠拢排成新的一行。如此循环,直到剩余不超过3个士兵为止,打印士兵开始的编号。
问题分析:
使用队列数据结构
特点是用两个队列,一个队列放旧,一个队列放新,循环着使用。用数组表示,这样选择时可以用i%2来自由切换。
队列用c++ 模板queue。
输出最后队列中数时,注意末尾不能有空格,打印队列元素时,循环体不打印最后一个,跳出循环后再打印最后一个。
其他
没想过用队列。看到例题答案后觉得,用队列很省脑力。理解队列的好处是对元素逐个处理,用规范的出队、入队、取队头元素等完成数据序列的操作。2个队列的效果就变成了兼具存储和处理的好处,减少了位置计算和压缩的工作。与单个队列相比,解决问题比我想象的范围要大很多。是不是选队列处理的一个特征是,对元素是不是从头到尾处理,如果是就可以用了。
代码链接:
https://github.com/xierensong/learngit/blob/master/hdu/h1276.cpp