Home >Backend Development >PHP Tutorial >觅女神要QQ号码

觅女神要QQ号码

WBOY
WBOYOriginal
2016-06-13 12:22:061082browse

找女神要QQ号码

引言

我们组来了个美女程序员,我心里窃喜,哈哈这下机会来了。我在想怎么下手呢?好吧,还是从QQ号码开始,找到女神要到QQ号,哈哈,我真是个天才~~~

是这样子滴

想法是美好的,现实是残酷的,找女神要QQ号码的时候,没想到女神没有直接给我,而是给了我出了道题(果真是程序员的交手~~ ~),题都给我了,做不出来的话,不但没了和女神的接触机会,连赖以为生的基本技能——编程能力都被质疑了~~~题目是这样的:

<code>给了一串数字(不是QQ号码),根据下面规则可以找出QQ号码:首先删除第一个数,紧接着将第二个数放到这串数字的末尾,再将第三个数删除,并将第四个数放到这串数字的末尾......如此循环,知道剩下最后一个数,将最后一个数也删除,按照刚才删除的顺序,把这些数字连在一起就是女神的QQ号码啦。</code>

觅女神要QQ号码

就是这样,女神给了一串数字631758924,现在要做的就是从这个数字中找出女神的QQ号码了,方法有很多种,比如说用9张卡片分别写上这9个数字,模拟题目的过程,可以算出来,也可以用笔一个一个的去算~~~~

这些方法都太low了,显示不出程序员的能力,还是写个程序比较酷一点(其实我是在想,要是下次再遇到一个女神出这样的题目,程序就很方便了,哈哈~~~)

解决办法

第一种方法,采用数学的方法,根据题目的规律,循环下面的操作:取整=>取余=>取余*10+取整。。。。。取余取整的对象都是10的倍数,根据位数而定,每次取整之后就是一位,循环直到数字等于0。

<code><?php $raw_num = 631758924;$num = 0;$devisor = 1;while($devisor < $raw_num){	$devisor *= 10;		//获取最小的大于raw_num的10的倍数的整数}while ($raw_num > 0) {	$devisor /= 10;	$next = floor($raw_num / $devisor);	//获取下一个数字	$num = $num*10 + $next;				//计算”半成品“QQ号码	$raw_num = $raw_num % $devisor;	$last = floor($raw_num * 10 / $devisor);	//移动数字,拼接最新的QQ号码	$pre = $raw_num % (ceil($devisor / 10));	$raw_num = $pre * 10 + $last;	}echo "恭喜你啦,成功获取QQ号码:{$num}";	//恭喜你啦,成功获取QQ号码:615947283</code>

利用队列的FIFO获取QQ号码,根据题目的特性,刚好可以使用队列来处理,队列简单方便,而且更好理解。

<code>#include<stdio.h>struct queue {	int *data;	int head;	int tail;}; int main(){	int num, i;	printf("请输出要破译的QQ号码长度:");	scanf("%d", &num);		struct queue q;	q.data = (int *)malloc(sizeof(int)*(num*2-1));	//总共需要的数组长度为num*2-1 	q.head = 0;	q.tail = 0;		for(i=1;i</stdio.h></code>

说点啥

本文点子来自《啊哈!算法》中的第二章,第一节【解密QQ号——队列】,唯一的插图也截取自本书。


微信号: love_skills

越努力,越幸运!越幸运,越努力!

做上CEO不是梦

赢取白富美不是梦

屌丝逆袭不是梦

就是现在!!加油
觅女神要QQ号码

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn