队列解密QQ号
队列解密QQ号
本篇博客主要是《啊哈!算法》的读书笔记,这里做一下记录。
问题场景:
给定一串 QQ 号,631758924,从其中解密出真实的 QQ 号。
解密规则:首先将第一个数删除,紧接着将第二个数放到这串数的末尾,再将第三个数删除并将第四个放到这串数的末尾,再将第五个数删除......,知道剩下最后一个数,将最后一个 数删除。按照刚才删除的顺序,将这些删除的数连在一起就是真实的 QQ 号。
1、C语言
代码实现:
/*
* 创建人:czc
* 创建时间:2019/8/31
* 创建用途:队列解密QQ号
*/
#include<stdio.h>
int main(){
int q[102]={0,6,3,1,7,5,8,9,2,4},head,tail;
//初始化队列
// head指向队首,tail指向队尾的后一个位置
head=1;
tail=10;
while(head<tail){
//打印队首并将队首出队
printf("%d ",q[head]);
head++;
//将新队首添加到队尾
q[tail]=q[head];
tail++;
//再将队首出队
head++;
}
return 0;
}
结果截图:
2、Java
代码实现:
/*
创建人:czc
创建时间:2019/8/31
创建用途:队列解密QQ号
*/
import java.util.Scanner;
import static java.lang.System.out;
public class Queue {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int[] q=new int[102];
int n,head,tail;
n=scanner.nextInt();
//初始化队列
for(int i=0;i<n;i++){
q[i]=scanner.nextInt();
}
head=0;
tail=9;
while(head<tail){
out.print(q[head]+" ");
head++;
q[tail]=q[head];
tail++;
head++;
}
}
}
结果截图:
吾生也有涯,而知也无涯。