本题主要考察队列的基本操作。
首先我们先根据题目创建一个队列QUEUE<INT> A,并按题目要求向队列里添加元素,既从1开始依次递增的等差数列:
接下来,可以看出我们是不知道一共要报几次数的,所以我们用WHILE循环。条件就是判断该队列是否为空。既WHILE(A.SIZE()!=0),并创建一个变量I用于模拟报数。然后先不要着急,我们先按照题目要求写一个判断函数,我们需要判断当前这个I是否为5的倍数或其中是否含有5:
之后我们要模拟一下淘汰出圈的过程,既输出队首元素并出队(注意要带一个空格):
最后还有一点,就是要模拟依次报数这个过程。就是出队后在入队即可:
完整代码(注意模拟报数的I要加一):
时间复杂度:O(N+N2∗D)O(N+N^2*D)O(N+N2∗D)其中N2N^2N2是因为每个数至少会被处理N次。而D是指数的位数。