摘要: 堆是一棵完全二叉树,其任一非叶结点的关键字不小于(最大堆而言)或不大于(最小堆而言)其左右孩子节点的关键字。假设待排序数组为A[],那么初始的话我们可以按层次编号建树,对结点i(从零开始)而言,其左右结点分别为2*i+1、2*i+2。堆排序的算法可大致描述如下:1.建立最大堆(或最小堆);2.for... 阅读全文
posted @ 2014-05-07 12:16 XpowerLord 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 设分针走x格(即x分钟)时,时针和分针重合。分针每走12格,时针走1格。而表盘上的一格为6度。12小时制下,1点过后,时针和分针重合,有度数:30+6*x/12=6*x,那么30=5.5x, x=60/11。即1:60/11时,二者重合。同理,2点过后,60=5.5x2:120/113点过后,90=5.5x3:180/11...h: 60*h/11时,二者重合。注意当h=11时,得11:60,即12:00,那么一天之内时针和分针共重合22次(24点视作第二天的0点)。两个指针重合的时间间隔为720/11分钟。同样由上可知,时针、分针、秒针一天只有两次重合,即0点和12点。 阅读全文
posted @ 2014-04-07 18:48 XpowerLord 阅读(2591) 评论(0) 推荐(0) 编辑
摘要: 如下图,按箭头方向输出改矩阵的元素:观察可知,若输出元素为M[i][j]时,i+j = k,k值从0到row+col-2逐渐变化,当k为奇数时,输出M[i][k-i];当k为偶数时,输出M[k-i][i]。 1 void outputMatrix(const char *M, const int row, const int col) 2 { 3 int n = row + col - 2; 4 for(int k=0; k<=n; k++) 5 for(int i=0; i<=k; i++) 6 { 7 ... 阅读全文
posted @ 2014-04-06 21:36 XpowerLord 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 问题:战场上不同的位置有N个战士(n>4),每个战士知道当前的一些战况,现在需要这n个战士通过通话交流,互相传达自己知道的战况信息,每次通话,可以让通话的双方知道对方的所有情报,设计算法,使用最少的通话次数,使得战场上的n个士兵知道所有的战况信息,不需要写程序代码,得出最少的通话次数。解答:若要使通话次数尽可能地少,那么通话双方所了解的信息要尽可能地互补,即能组成全部的信息。因此考虑分治法,最小单位为2,因为2个人之间最少需要一次通信。设N个人通信最少需要K次通信,考虑N=5和N=6时:如上图,线上的数字表示通信的序号,在通信时,尽可能地满足信息互补,如左图中4、5两次通信,右图中5、6 阅读全文
posted @ 2014-04-06 20:04 XpowerLord 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 题目:A,B从一堆玻璃球(共100个)里向外拿球,规则如下:(1)A先拿,然后一人一次交替着拿。(2)每次只拿1个2个或4个。(3)谁拿最后一个球,谁就是最后的失败者。解答:如果A要想赢,那么最后一轮可以拿的个数要一定要为2,3,5中的一个,A先选,B在最后一轮只能拿1个;如果这样的话倒数第二轮到B拿的时候如果是4个的话,那么B就一定会输(4=1+2+1,4=2+1+1,4=4)。要让B拿的时候只有4个的话,倒数第二轮到A拿时所剩玻璃球的个数要为5,6,8中的一种,这样才能保证B不论拿几个一定会输。同理,倒数第三轮到B拿的时候如果是7个的话,B不论怎么拿就一定会输。也是同样的理由,倒数第三轮A 阅读全文
posted @ 2014-04-05 21:24 XpowerLord 阅读(912) 评论(0) 推荐(0) 编辑
摘要: 问题:一座共100层的高楼,现需测试玻璃球的抗摔程度,即从哪层掉落玻璃球恰好摔碎,假设玻璃球在各楼层恰好掉落摔碎的几率相同,请设计方案,使实验次数尽可能少。解答:若用1颗玻璃球,则需从1层到100层逐层测试,因此平均测试次数为(1+2+3+...+100)/100=50.5,如此测试肯定不是最优方案。因此考虑用2颗玻璃球,第一颗玻璃球从低层到高层逐层测试,设序列为x1, x2, ..., xn. 当第一颗玻璃球在xi层掉落摔碎时,就用第二颗从xi-1+1层逐层向上测试,直到第xi-1层,因此共需要实验(i+xi-xi-1-1)次。故总的平均测试次数为:[(1+x1-1)+(2+x2-x1-1) 阅读全文
posted @ 2014-04-05 21:02 XpowerLord 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 好久没有敲代码了,于是这两天找个题(求两个字符串的最长公共子串)练练。用的是最简单也最笨的方法,即扫描一个短串,用长串来匹配。本意是想练练结构体二级指针的,用结构来存储所有的公共子串,结果误打误撞发现了一些问题。如上图,我分别画出了二级指针seq_p以及一级指针seq_p[0]、seq_p[1]的内存示意图,由图可知,虽然seq_p[0]的值等于*seq_p的值,但seq_p[1]的值并不等于(*seq_p)+1的值,因为(*seq_p)+1的值为*seq_p的值加上一个结构(8个字节)的偏移量,而内存是按字节编址的,因此(*seq_p)+1的值为0x551848≠0x5518b0。因此,如果 阅读全文
posted @ 2013-04-01 22:44 XpowerLord 阅读(630) 评论(0) 推荐(0) 编辑
摘要: win7下安装ubuntu,重新启动之后,你会发现丢失了windows 7的启动项。下面来说明如何修复。1.进人Ubuntu系统,打开终端,命令如下:sudo gedit /etc/default/grub2.修改GRUB_TIMEOUT="10"3.然后在终端中输入:sudo update-grubupdate 命令会自动找到 windows 7 启动项。并且自动更新 /boot/grub/grub.cfg 文件。 阅读全文
posted @ 2013-03-03 02:01 XpowerLord 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 一、引用的概念引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符&引用名=目标变量名; 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行初始化。 (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。 inta,&ra=a; a为目标原名称,ra为目标引用名。给ra赋值:ra=1;等价于a=1; (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不 阅读全文
posted @ 2012-07-29 23:12 XpowerLord 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 有一字符串,全由小写字母组成,如“aaccbc”,要求顺序求出字符串中字符出现次数,如输出“a2c3b1”,求算法。以下是本人第一次写的,时间复杂度为O(n^2)。View Code void func(const char *str){ int i = 0; int temp = 0; int len = strlen(str); int A[26]; while( i 0 ) { A[str[i]-97]++; } } ... 阅读全文
posted @ 2012-04-13 20:02 XpowerLord 阅读(499) 评论(0) 推荐(0) 编辑