您的位置:首页 > 其它

①算法之队列解QQ密码

2015-05-09 14:30 274 查看
本应该排序是应该算法最先学的,不过既然是记录我就只记录自己难点的地方了。算法书籍很多,不过我不喜欢经典,经典之所以成为经典,是需要多看几遍的,不过《啊哈算法》这本书还是适合入门小菜鸟学的。我也是小菜鸟。

算法大部分是C写的,对于自己一直在用java写程序员的人,倒是有点不习惯,书中的是用C写的,我就用java自己再写一遍呗,深刻理解一下。

内容来自 《啊哈算法》

题目:

新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~) ,小哼向小哈询问 QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第 1个数删除,紧接着将第 2 个数放到这串数的末尾,再将第 3 个数删除并将第 4 个数放到这串数的末尾,再将第 5 个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的
QQ啦。 现在你来帮帮小哼吧。 小哈给小哼加密过的一串数是 “6 3 1 7 5 8 9 2 4” 。

解题思路:不用想数组是肯定有了,首先在算法习惯设计头和尾进行标记,分别是head 和tail。删除即是在首+1 交换即是个尾交换 尾+1 首也+1 直到首>=尾结束循环



算法实现:

package queue;

public class QueueDemo {

	public static void main(String[] args) {
		int q[] = new int[23];
		// 6 1 5 9 4 7 2 8 3
		q[0] = 0;
		q[1] = 6;
		q[2] = 3;
		q[3] = 1;
		q[4] = 7;
		q[5] = 5;
		q[6] = 8;
		q[7] = 9;
		q[8] = 2;
		q[9] = 4;
		int head, tail, i;
		// 初始化队列
		head = 1;
		tail = 10;
		while (head < tail) {// 当队列不为空的时候执行循环
			System.out.println(q[head]);
			head++;
			q[tail] = q[head];
			tail++;
			head++;
		}
		for (int j = head; j < tail; j++) {
			System.out.println(q[j]);

		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: