a = a+b; b = a-b; a = a-b;
两道数学题:河岸的距离和变量交换
a = a+b; b = a-b; a = a-b;
桌子上有三张扑克牌,排成一行。现在,我们已经知道:
1.K右边的两张牌中至少有一张是A。
2.A左边的两张牌中也有一张是A。
3.方块左边的两张牌中至少有一张是红桃。
4.红桃右边的两张牌中也有一张是红桃。
问:这三张是什么牌?
分析与解答
这三张牌,从左到右依次为:红桃K、红桃A和方块A。
先来确定左边的第一张牌。从前提1得知这张牌是K;从前提4得知这张牌是红桃;所以,这张牌是红桃K。再来确定右边的第一张牌。从前提2得知这张牌是A;从前提3得知这张牌是方块;所以,这张牌为方块A。最后,来确定当中的一张牌。从前提2得知,或者这张牌是A,或者左边第一张是A;又从前提1得知左边第一张是K,所以,当中这张牌是A。同理,从前提4得知,或者当中这张牌是红桃,或者右边第一张牌是红桃;但由前提3可知右边第一张是方块,这样,即可确定,当中这张牌是红桃。
最近参加校园招聘,笔试是必要的。先热身,把数据结构的基础东东拿出来 Review 一下。
线性表的链式存储结构:
链式存储表示:
typedef struct LNode{ ElemType data; Struct LNode *next; }LNode,*LinkList;
基本操作在链表上的实现:
(1) 单链表的取元素算法(经典)
Status GetElem_L(LinkList L, int i,ElemType &e) { p=L->next; j=1; while(p && j<i) { p=p->next;++j; } if(!p || j>i) return ERROR; e=p->data; return OK; }
算法分析:
基本操作是: 比较 j 和 I, 并把指针后移 , 循环体执行的次数 , 与被查元素的位置有关 . 假设表长为 n, 如果 1<=i<=n, 那么循环体中语句的执行次数为 i-1. 否则次数为 n 所以时间复杂度为 O(n).
(2) 插入元素算法
Status ListInsert_L(LinkList &L, int i,ElemType e) { p=L;j=0; while(p&&j<i-1) { p=p->next;++j} if(!p || j>i-1) return ERROR; s = (LinkList)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next =s; return OK; }
(3) 删除元素算法
Status ListDelete_L(LinkList &L, int i,ElemType &e) { p=L;j=0; while(p &&j<i-1) {p=p->next;++j} if(!p ||j>i-1) return ERROR; q=p->next; p->next =q->next; e =q->data; free(q); return OK; }
算法分析 :
插入和删除算法 , 都要先找到第 i-1 个节点 , 所以时间复杂度为 O(n);
(4) 单链表的建立算法
void CreateList_L(LinkList &L,int n){ L =(LinkList)malloc(sizeof(LNode)); L->next = null; for(i = n;i>0;--i){ p =(LinkList)malloc(sizeof(LNode)); scanf(&p->data); p->next = L->next; L->next =p; } }
算法分析 :
按照逆序循环输入 n 个数据元素的值 , 建立新节点 . 并插入 . 因此算法的时间复杂度为 O(n).
一直用 FireFox 和 IE8 模拟的 IE7,今天特意用 IE6 看了下我这个博客。惨不忍睹啊!赶紧又瞧了瞧博易的几套主题模板,对 IE6 的支持简直就是一塌糊涂!
心想既然 IE6 这么的另类,那干脆别管它了吧。下意识地跑到网站统计看了看,又吓了一跳:有一半以上的浏览者使用的是 IE6 的浏览器,我的天!
还好博易官方和博易的标准模板是对 IE6 保持兼容的。我才意识到为什么发布的一些模板用的人少,而大多数的朋友仍然在用默认主题模板的原因了。
要把所有的模板都改过使其兼容 IE6 简直就是噩梦一般,我只能寄希望于 IE6 的用户升级到更高版本或者换用其他浏览器了。
博易v1.7.5已经做好了很久,今天才打包并正式发布。这个版本几乎没有动内核,修改主要是体验上的,所以升级过程也相当简单。
每次发布一个新的版本我都期望能为博易积累些新的人气,这次也不例外。事实上我已经看到一个令我欣慰的趋势——博易正以一支后起之秀正从原本已经三分天下的国内博客市场逐步形成了自己的用户群和市场,尽管这个过程并不容易,但的的确确已经有人开始关注博易博客了。
博易获得如此的关注正是本身的优秀与诸多博客特性所成就的,这要感谢 BlogEngine.NET 官方与世界分享的这么优秀的博客架构(至今仍未发现有在架构上与之相媲美的ASP.NET博客,至今也未能发现在功能实现上有如此之丰富且简单的ASP.NET博客,近乎完美了!)。就拿博易的 SEO 性能来说,我们可以做一个比对:
http://whois.domaintools.com 是一个查看网站信息的页面,所分析内容很全,包括 SEO 性能指标。我们看到一些博客在 http://whois.domaintools.com 上的 SEO 性能列表如下。
博客名称 | SEO 性能指标 | 标题关联度 |
Bo-Blog | 79% | 100% |
L-BLOG.NET | 95% | 66% |
PJ-Blog | 86% | 100% |
Zblog | 76% | 33% |
BlogYi.NET(博易) | 92% | 100% |
以上数据采集时间为:GMT +8 2008-10-17 13:25
不仅仅是 SEO 性能指标令人满意,更多的是博客概念的完备。国内很多博客单纯强调功能,也确实实现了许多功能。但功能多了之后,开发团队对博客的升级往往就成了“为了实现功能而开发”,而不是“为了丰富博客概念而开发”。那么该如何进行“为了丰富博客概念的开发”呢?举一个例子,BlogEngine.NET 官方为其博客设计了一种称为“APML过滤”的功能,能够神奇地生成博主对博客文章的“口味”(实际上是一个XML格式的文件),博主有了自己的“口味”,他看其他的博客的时候就可以根据自己的这个“口味”来过滤其他博客中的文章了。这样一来,看到的文章基本上都是自己感兴趣的,而那些不感兴趣的文章将被忽略掉!
这正如一句软件业的名言:现在连用户自己都不知道自己需要什么软件,而我们要做的就是为用户提供他们真正所需要的软件。