队列解密QQ号
队列解密QQ号
本篇博客主要是《啊哈!算法》的读书笔记,这里做一下记录。
问题场景:
给定一串 QQ 号,631758924,从其中解密出真实的 QQ 号。
解密规则:首先将第一个数删除,紧接着将第二个数放到这串数的末尾,再将第三个数删除并将第四个放到这串数的末尾,再将第五个数删除......,知道剩下最后一个数,将最后一个 数删除。按照刚才删除的顺序,将这些删除的数连在一起就是真实的 QQ 号。
1、C语言
代码实现:
/*
* 创建人:czc
* 创建时间:2019/8/31
* 创建用途:队列解密QQ号
*/
#include
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){ q[i] =scanner.nextInt(); } head=0; tail=9; while(head<tail){ out.print(q[head]+" "); head++; q[tail]=q[head]; tail++; head++; } } }
结果截图:
吾生也有涯,而知也无涯。