解密QQ号的规则是:先将第一个数删除,紧接着将第二个数放到这串数字的末尾,知道剩下最后一个数字,将最后一个数字也删除,把删除的数字链接起来就是QQ号。
尝试编程思路:
首先需要一个数组来存储这串数字,解密的第一步就是怎么讲第一个数删除,在数组中删除一个元素就是把后面的元素往前面挪动一位,将前面的数字覆盖掉。补上之前的空位,但是这样会很好费时间,在这里我们引入两个变量head和tail,head用来记录队列的队首(即第一位),tail记录队列的队尾(即最后一位)的下一个位置。tail为什么记录队尾的下一个位置而不是队尾,这是因为队列中只剩下一个元素的时候,队首和队尾重合会带来一些麻烦,我们规定队首和队尾重合的时候,队列为空。
现在有9个数,9个数全部放入队列之后head=1;tail=10;此时head和tail之间的数就是目前队列中“有效”的数,如果删除一个数的话就head++。这样做虽然浪费了空间,但是节省了大量的时间。新添加一个数就q[tail] = x ;tail++;
代码实现:
import java.util.Scanner;
public class MyQueue {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int [] arr = new int[102];//开辟的数组空间
for (int i=1;i<10;i++) {
arr[i] = input.nextInt();
}
int head = 1;
int tail = 10;//目前数组中
while (head < tail) {//当队列不为空的时候循环
//打印队首
System.out.print(arr[head]+" ");
head++;//出队
//先将新的队首数据添加到队列的末尾
arr[tail] = arr[head];
tail++;
//再讲队首出队
head++;
}
}
}
运行结果:
image.png