<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[冰之神话]]></title> 
<link>http://blog.thulu.com/index.php</link> 
<description><![CDATA[如果我能创造一个神话]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[冰之神话]]></copyright>
<item>
<link>http://blog.thulu.com/read.php?32</link>
<title><![CDATA[（转）汉语编程--汉芯之后的中国软件界大骗局 ]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Thu, 26 Jun 2008 14:35:49 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?32</guid> 
<description>
<![CDATA[ 
	汉语编程--汉芯之后的中国软件界大骗局 <br/>一、闹得沸沸扬扬的汉语编程<br/>二、汉语编程其实是一个大骗局<br/>三．汇编都是英文的，其他变成汉语有什么用<br/>四、其实汉语编程很好创造出来，但是却没什么用<br/>五、中国人编程难的问题和出路在那里<br/><br/><br/>一、闹得沸沸扬扬的汉语编程<br/>这几年以来，特别是最近一段时间，汉语编程闹得沸沸扬扬，大有我中华民族之骄傲，如果不加紧实行汉语编程，中华民族就要消失了。徽剑本对于汉语编程不以为然，一直没有理会。之所以写这篇文章，是因为徽剑前几天接到一电话，是北京一家公司打过来的，大谈推广汉语编程，要跟徽剑的公司合作在深圳推广，于是徽剑查了一下资料，发现这两年所谓的汉语编程这场闹剧居然愈演愈烈，于是徽剑不得不出来揭露下。对比去年的汉芯事件，徽剑认为，所谓的汉语编程只不过是另一场汉芯的重演而已。所以看完本文，特别是程序员朋友，如果您认为徽剑说的有理，请将本文多多转发到各种论坛，揭露这场骗局。<br/><br/><br/>先来看新闻，2007年09月《通信产业报》以“汉语编程异军突起 民族产业出黑马”为题发表了一篇文章。开头是这样：<br/>“当今世界，科技突飞猛进。网络改变了人们的生活和思维，成为人们学习和工作不可或缺的一部分。人们点击鼠标进行学习、工作和接收外界信息的时候，计算机程序设计语言在其中起到了至关重要的作用。很多年来，我们一直在使用国外的编程语言，人们已经习惯了用C语言、JAVA等计算机语言编写应用程序，实现人与计算机的完美对话。但是朋友您知道吗，真正属于我们自己的计算机程序设计语言——汉语编程已经问世，而且已经在诸多领域发挥了重要的作用。”<br/>然后文章介绍了汉语编程：<br/>“汉语编程萌发于1984年，1994年获得国家发明专利。汉语程序设计语言，不是对计算机语言的简单汉化，也不是为某种软件制造一个中文环境，而是中国人自已掌握全部源代码，使用汉字信息指令，从计算机底层入手，使计算机的中央处理器(CPU)能够处理存储器中的汉字词典，从而实现计算机对汉字程序的识别，不受现行操作系统控制的技术系统，且完全拥有独立的自主知识产权。”（呵呵，这段话里面的问题就先不说了）<br/>在文章的末尾，还上升到了民族大义的高度：<br/>“我们曾经因为闭关锁国错过了工业革命的巨轮，也曾忙于阶级斗争，而错过战后新技术发展的浪潮。如今，我们有了完全自主知识产权的计算机语言，其核心技术无可挑剔，且优势日益明显，我们不能再错过最好的发展时机。汉语编程是民族的，是国家的，中国这个有着5000年深远文化的泱泱大国，理应把它好好利用起来，发展和振兴我国民族产业，为中国人民所熟知和使用。”<br/>徽剑在收集到的另外的资料还有这样报道：<br/>“近日，用汉语编程实现的数据库开发环境将通过江苏省科技厅的验收。按照进程，汉语程序设计语言数据库开发环境项目完成后一年，项目承担方——南京汉语编程有限公司将以汉语编程数据库教育版为推广重点并进行其他工程开发。项目完成后两年，汉语编程数据库标准版将以OEM方式与国内PC制造商捆绑销售。项目完成后三年，将推出汉语编程数据库企业版参与政府、企业、部队信息化建设，部分替代进口产品。江苏省科技厅将对该项目投资三百万元。同样看好汉语编程的还有重庆市科委，他们的预期投资是上千万。汉语编程作为重大科技发明发现正在申请重庆市的国家级项目。重庆药监局正在应用汉语编程开发的数据库实现对所有下属药店的监管。目前这个项目完成了大部分，6月底将最后完工。”<br/>当然徽剑在报道中也找到了不同的声音：“从2001到2002的两年间，北京市科委对汉语编程项目进行了5次评审。评审的结果是，超过50%的专家并不认可汉语编程的可行性，元易达没有能在北京市科委立项。元易达于是坚持“农村包围城市”的市场开发路线。当年对北京元易达公司进行评审的时候，原中国科学院计算机软件研究所研究院员仲萃豪这样评价，“用汉语编程语言开发数据库，这条路是相当艰巨的。汉语编程现在还只是一个小玩意。”<br/><br/>看完这些，有人会问，到底这个汉语编程是怎么回事？到底有多大价值？对未来的发展有如何贡献？那么好，下面就来分析。<br/><br/><br/><br/>二、汉语编程其实是一个大骗局<br/><br/>我们知道一个骗局“汉芯事件”， 2003年2月，在摩托罗拉公司做测试的工程师陈进，将一片从美国买来的MOTO-free scale 56800芯片，雇请民工磨掉原有标志，然后加上自己的“标识”，变成了所谓“完全拥有自主知识产权”的“汉芯一号”，申请了多项专利，并借此当上了上海交大微电子学院院长、博导以及“长江学者”。<br/>汉芯事件一大特点就是拿一块别人的芯片，简单修改一下，然后包装成自己的成果。这种如果是商业上，只要不侵犯别人权益也就无可厚非。但是作为科技开发就不同，讲究的是原创和事实。我们来对比下汉芯和汉语编程，我们会发现他们有惊人的易曲同工之妙。<br/>报道这样说：“汉语程序语言是在1993年由北京百乐航天应用技术公司汉语工控部的沈志斌发布的，最初为PC1.0版，是一个16位版本，只能在MS－DOS环境下运行。2000年，沈志斌组建了北京元易达公司，专门从事汉语编程的产品开发。经过 近十年的发展，汉语程序语言目前最新的版本为2.03，能够在WINDOWS9X/NT环境下运行。”<br/><br/>一开始的时候，徽剑也没明白这到底是什么语言，还以为这真是汉语编程的原创，只是觉得有些别扭，一来是觉得“汉语编程”的软件经过这么多年的发展，版本一直不变，是否让人难以理解？而且其开发界面极其难看，用反汇编软件居然发现汉编编译器主程序文件居然使用的是微软的VC运行库，这里让人极其不解，既然汉语编程都到了可以汉语汇编的程度，为什么编译器还要用VC来开发？<br/>最近在铁血社区看到一篇文章，才完全证实了徽剑的猜测。<br/>从词典看某“汉语编程”与Forth语言http://bbs.tiexue.net/post_2304429_1.html<br/>看完了文章上面的图片对比，相信只要有编程基础的人士都可以明白，这完全是彻头彻尾的剽窃。一个把开源代码复制过来，加以简单修改，然后包装成自己的原创。<br/>这里很抱歉一开始的时候，徽剑对于这种叫Forth语言确实孤陋寡闻，徽剑正想自己动手比较的时候，有一位网友做了好事，先比较了下： <br/>原帖链接（http://www.xycq.net/forum/thread-152078-1-1.html），作者来个分析：<br/>“汉语编程目前能够下载到的版本为2.03.1920，由于只使用一个版本的汉语编程，后面的描述中就省掉版本了。在铁血网中的帖子有一个简单的比较，用的是一个叫win32forth的forth实现，在其主页Download's中可以得到两个不同的版本，一个是4.2build671，另一个是6.12.00是目前最新的稳定版。在铁血帖中提到过wincon.dll这个文件，我也是从这个文件入手的。”<br/>于是该网友用VC6中的Depends查看三了个wincon.dll的结果。发现入口非常相似，也就是有可能是差不多的文件。于是该网友考虑了将三个DLL进行互换。<br/>“将三个dll文件复制到一起，先将三个文件复制到win32forth4.2中，分别使用三个dll后启动WIN32FOR.EXE的结果发现“汉语编程的wincon.dll文件能够被win32forth4.2正常使用，而且读出来的数值与汉语编程环境下一致，都是10895。由于接口改变，4.2和汉语编程的wincon.dll都不能在6.12中使用了。而win32forth4.2版与6.12版的wincon.dll文件都能够在汉语编程环境下使用，而且读出的值都与原环境下一致。综上情况，汉语编程与win32forth在wincon.dll文件上保持了相当好的兼容性，如果说二者一点关系都没有，形成这种结果的几率不知道能有多大。”<br/>更为搞笑的是，当该网友试着将汉语编程程序和win32forth4.2目录下的这个同名文件WINCON.DLL删除时居然发现汉语编程与4.2的提示基本一致（徽剑测试时除了标题的两个字母大小写不同外其他一致）。该网友不禁问：“这也是巧合吗？一个号称汉语的居然冒出一句英文的提示而且还跟别人的如此相似，而且是"Missing procedures!"这种计算机程序中少见的用词以及少见的标题栏中用标点。”<br/>“将汉语编程的win32chp.dll文件复制到win32forth4.2文件夹下并命名为win32for.img，当然之前要备份好原来的win32for.img文件；将汉语编程的ckernel.ovl复制到win32forth4.2文件夹下。然后找一个16进制编辑器，打开win32for.img文件，从偏移4（也就是第5个字节）开始，连续4个字节修改为D5 11 92 01，保存。双击win32for.exe，”<br/>徽剑看到的是居然看到的是带着win32forth 4.2图标的汉语编程。<br/>最后该网友总结到：“说到底，汉语编程应该是这么来的，由于win32forth的源码是公开的，汉语编程利用其源代码将win32forth字样抹去，并且修改了识别词库文件的标志（将win32forth的D5 11 92 01修改为DA B7 6E EF），编译出可执行程序。然后又根据需要，汉化及添加、修改了词库形成了现在用汉字和一堆全角符号编程的汉语编程语言。可以说汉语编程为了掩盖其与win32forth的关系，将符号修改的很彻底，也不管那一堆全角符号用起来多么古怪。”<br/>“如果继续研究下去，我想还会掌握更多的证据，甚至有希望根据wincon.dll和winapi词数找到汉语编程使用的那个版本的win32forth，不过目前我觉得这些证据已经足够了，已经不需要再浪费时间了。”<br/>最后作者得出结论：<br/>“其实汉语编程就是win32forth的一个修改版，实现的功能基本上都是win32forth实现的。把这个东西吹嘘为民族的希望，汉语编程需要带的ckernel.ovl和win32forth 4.2需要带的kernel.bin文件都是词库（其实就是编译过一次的字节码）的要求，比如要是用汉语编程的编辑器winedit.dll替换成win32for.img的话就不需要带ckernel.ovl了。注意观察一下汉语编程的各个程序，都是由同名的一个exe文件和一个dll文件组成的，那个dll文件并不是真正的win32格式的dll文件，而是与win32forth 4.2的img仅差一个标志的一种格式；而那个exe文件其实都是可以互换使用的，当然跟win32forth 4.2互换都没有问题。”<br/>看到没有，一个骗子。一个跟汉芯一样的骗子。<br/><br/><br/>三．汇编都是英文的，其他变成汉语有什么用<br/>下面来介绍下语言的基础，（这部分主要是给对编程不是很了解的人士看的，有些地方不严谨，但是只要说明意思就可以了）<br/>我们先看语言基础，我们平时看到的电脑每做的一次动作，一个步骤，都是按照以经用计算机语言编好的程序来执行的，程序是计算机要执行的指令的集合，而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。计算机语言的种类非常的多，总的来说可以分成机器语言，汇编语言，高级语言三大类。 <br/>计算机所能识别的语言只有机器语言，即由0和1构成的代码。但通常人们编程时，不采用机器语言，因为它非常难于记忆和识别。目前通用的编程语言有两种形式：汇编语言和高级语言。 <br/>作为机器语言，其核心是如何控制内部运算，对于不同的CPU架构体系，其机器语言也会不同。表现出来的就是指令集，CPU依靠指令来计算和控制系统，每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。<br/>汇编语言的实质和机器语言是相同的，只不过指令采用了英文缩写的标识符，更容易识别和记忆。使用汇编语言编写的程序，机器不能直接识别，要由一种程序将汇编语言翻译成机器语言，这种起翻译作用的程序叫汇编程序，由于汇编语言只是机器语言的符号化,虽说相对简单了,但是还是得要求人们学习相应的内部结构,对于复杂的内部结构,有很大一部分人还是无从着手的.所以就出现了高级语言,当程序员用高级语言指令写完源程序后,只需用编译器编译就可运行了.此时编译器所做的工作就是把高级语言指令翻译成汇编语言(机器语言。.<br/>对于软件开发者来说，他需要考虑的是CPU的指令集，也就是CUP指令集的汇编指令，只有针对这些指令才能开发出相应的程序来，举例来说，你在基于英特尔CUP的汇编指令上开发的程序，就不能在苹果电脑上运行。而这些汇编指令集都是CUP等硬件厂商开发提供的，目前我们知道CUP的大部分厂商都是海外公司，他们的指令集（都是汇编语言写成）都是英文的。<br/>高级语言是目前绝大多数编程者的选择。和汇编语言相比，它不但将许多相关的机器指令合成为单条指令，并且去掉了与具体操作有关但与完成工作无关的细节，这样就大大简化了程序中的指令。高级语言如目前流行的VB、VC、FoxPro、Delphi等，高级语言所编制的程序不能直接被计算机识别，必须经过转换才能被执行。 <br/>通常而言,人们写程序有两种方式，<br/>一是直接用汇编语言写，然后翻译成机器语言。<br/>二是用高级语言写，然后编译器翻译成汇编，最后翻译成机器语言。<br/>也就是说，程序语言的编写分为三个层次。<br/>第一层次（最低层次）是机器语言 其语言都是01.<br/>第二层次是汇编语言（使用不同的CUP指令集）其语言都是英文<br/>第三层次是高级语言 <br/>我们会发现一点，不过你采用什么语言编写，最终的都是要编译成汇编语言然后到机器语言，最终都是要调用CUP指令集。（这里需要指出的是，任何汇编指令集，都是硬件开发厂商开发的，而不是什么程序语言公司开发的。）就目前而言，这块都是英语，目前国内有人推出的汉语汇编编程，徽剑觉得啼笑皆非，就汇编语言而言，是直接对CPU等硬件操作的，必须依赖各种指令集，而这些厂商，有几个提供汉语指令集？<br/>在没有硬件厂商提供的汉语指令集前提下，所谓的汉语汇编是不是“鸡对鸭讲”？这么一来是不是要有人把英文指令集翻译成汉语？那跟汉化有什么区别？<br/>这样一来任何人都可以开发出一套汉语汇编来，很简单，找一套汇编编译器，增加一个翻译过程，当输入汉语时，将其翻译成对应的英文汇编程序，然后再翻译成机器语言，或者直接采用替换方式，当输入英文的时候，将其翻译成（英文对应）的机器语言。<br/>任何汇编指令集，都是硬件开发厂商开发的，而不是什么程序语言公司开发的。让程序开发者利用汇编语言来操作他们的硬件。除非硬件厂商提供直接针对汉语的指令集，否则任何所谓的汉语汇编都是，翻译器加汇编编译器。<br/>也就是说，在汇编领域，目前并未有任何厂商提供汉语指令的指令集，那么意味我们所谓的“先进的汉语汇编”就不是什么自主开发的东西。那么这里有一点就可以明了，就是目前的真正的汇编都是英文的。汉语汇编其实只是“假汇编”。<br/><br/><br/>四、其实汉语编程很好创造出来，但是却没什么用<br/><br/>前面谈到的那个“汉编”事实上是个骗子，下面徽剑要说说不是骗子的汉语编程，以易语言为例。<br/>易语言是曾经和朱崇君一起开发CCED的吴涛于 2000年初开始开发的，这是一款Windows下全中文可视化编程语言，最新版本为 4.0。易语言自发布后，以其类似于VB的风格和彻底中文化的特点赢得了不少电脑爱好者的青睐，<br/>易语言的特点就是用汉语来写，原来编写程序输入的是英文，现在改成输入汉字了，我们来看段易语言程序：<br/>引入 apr;<br/>公开 类 启动类<br/>&#123;<br/>公开 静态 启动()<br/>&#123;<br/>整数 数量;<br/>控制台.输出行("请输入将要生成的随机数个数:");<br/>数量= 控制台.输入整数();<br/><br/>随机数集合.显示(数量);<br/><br/>随机数集合.显示();<br/>&#125; <br/>&#125;<br/>公开 类 随机数集合<br/>&#123;<br/>公开 静态 显示(整数 生成个数=10)<br/>字节集 临时字节集;<br/>整数 I,J;<br/>内存池 局内存池 = 创建 内存池;<br/>控制台.输出行("下面开始生成"+生成个数.到文本+"个随机数====>");<br/><br/>计次循环(生成个数,J)<br/>&#123;&nbsp;&nbsp; <br/>&nbsp;&nbsp;临时字节集=随机数.生成随机数(1,局内存池);<br/>&nbsp;&nbsp;I=字节集类.到整数(临时字节集);<br/>&nbsp;&nbsp;控制台.输出行(整数类.到文本(I));<br/>&#125;<br/>控制台.输出行("<========随机数已生成");<br/>控制台.输入文本();//暂停屏幕滚动用&nbsp;&nbsp; <br/>&#125; <br/>&#125;<br/>事实上，徽剑看不出这里有什么优势，懂中文的人似乎也没几个能明白。有人说易语言似乎对于英语不好的人有帮助，其实很荒谬，因为如果但是写程序部分所使用的英文数量是很少的，常用的也就几十个英文单词，一般情况下也就几百个英文单词。也就是说，如果仅仅考虑到“写程序”这块而言，会个三五百单词足够，这点数量的单词相信没有几个人学不会。<br/>我们必须看到而真正出问题的在于“接口”上面，前面说了，目前的操作系统、几乎所有的各种应用程序都是英文编写的，所谓的中文版只是在用户界面做了汉化，这样一来，用汉语编写的程序如果要在操作系统上运行、或者与其他程序交换数据，不可避免的遇到英文代码，特别是操作系统，比如windows下的API等而这些接口又是成千上万，如果没有很好的英文是很头疼的。<br/>更为甚者，这些接口的文档大多都是英文编写，没有好的英文水平是阅读不了的。也就是说如果你想成为程序高手，英文是必须解决的拦路虎。也许有一天有了全中文的硬件指令集、全中文代码的操作系统，那时候我们就可以说用中文编程了。就目前而言对于专业程序员而言，汉语作为程序设计的描述语言并没有什么实际意义。<br/>如果仅仅是考虑普通用户不懂英文，不会“写程序”，那么徽剑提出一个更为简单的方法：“汉化”，我们可以分为这么几步走：<br/>第一步，对汇编编程器进行汉化，使其在输入汉语汇编指令时自动对应相应的机器语言。<br/>第二步，对诸如C、C++等编译器进行汉化，将其内部对应的英文指令替换成汉语，这样一来在输入汉语C、C++程序时可以直接编译。<br/>第三步，编译C、C++等的教材，将其中英文描述换成规范的汉语程序词汇。同时大量翻译各种英文指令书籍，便于中文编程人员查找。<br/>第四步，创立汉语操作系统，找一套开放源码的LINUX，修改其编译器，将编译器输入对应的英文换成汉语，然后将全部源代码翻译成汉语，再用编译器编译一下。当然个别地方要考虑到汉语的编码特点修正一下。徽剑计算，依照几十名翻译人员，差不多一年可以完成，看看一套全面的汉语代码操作系统出来了，<br/>看到没有，就这么几步，连强大的C、C++等都成了汉语编程语言了。如果想傻瓜点，也可以啊，跟微软合作、跟SUN合作，可以把.net、JAVA全部汉化了，想来他们也没有什么反对的。<br/>有人说：“汉语编程的优点概括为以下几个方面：首先是安全系数高。汉语编程是我们用汉语实现的人机对话，我们掌握所有的源代码，目前尚未发展能与之对抗的病毒，非常有利于保证计算机内的机密安全。”<br/>这纯粹胡扯，目前的计算机语言，特别是诸如C、C++语言本身都是免费的、开放的，任何人都可以学习、使用。就像相对论不是中国人发现的，但是我们一样用，这只是一种知识而已，如何在这种知识上开发成果来，那是另外一回事。一种知识是谈不上安全的。我们并不因为飞机是外国人发明的，我们自己造飞机就泄露了什么机密。假如我们完全用自己的汉语编程，难道国外特工就不会学吗？难道国外的信息部队就不会针对这个开发病毒吗？而且还是一开一个准，因为你是单独的，与众不同，开发针对你的不用担心自己受影响。<br/><br/>有人说：“汉语编程是效率高。汉语编程的原理是建立在汉字的本身优势上，汉字看起来很复杂，但表达的意义却很丰富。且在键盘上输入汉字远比输入英文快，用汉语编程写出的程序远比其他语言篇幅要短很多。”<br/>这里同样也是胡说，请问一下，当你在键盘上输入“if”快还是“如果”快，是输入“end”快还是“结束”快？要知道在编程的英语不是日常的英语，完全可以说是一种新的人类语言，在键盘上输入汉字只是在总的信息量上比英文多，而不是单位数量汉字敲击键盘的次数比英文少。徽剑做过简单测试，发现以C++为例，如果把C++翻译成汉语输入，单位时间内的击键次数是英文的很多倍。<br/><br/>有人说：“汉语编程是简单易学，便于普及。只要认识汉字，上到九十九下到刚会走，都可以学习和使用。”<br/>这更是胡说八道，如同前面分析的那样，用汉语“写程序”是方便了，可是还有那么多英文接口、英文文档怎么办？再说了，有必要来个全民编程吗？美国普通人也没几个会编程的。而且我们看看上面的易语言代码，光是认识汉字的人明白吗？<br/><br/>我们还是看一段评论：“从理论上讲，汉语编程应当是一种以汉语为描述语言的计算机程序设计语言，在程序设计 中体现了汉语语法和逻辑，符合中国人的语言习惯和思维方式，而不是英文程序设计语言的简单汉化，或者是简单地营造一个汉语编程环境。很遗憾的是，目前我们 所能见到的汉语编程语言，就只不过停留这个层次上，并没有取得任何实质性的突破。事实上，从2001年到2002年间，北京市科委对汉语编程项目 进行了5次评审，评审的结果是超过50%的专家并不认可汉语编程的可行性。”<br/><br/><br/><br/>五、中国人编程难的问题和出路在那里<br/><br/>下面我们看看中国人编程难难在那里？<br/>徽剑以一个拿到（说混到也可以）的系统分析员证书的编程者的亲身体验，中国人编程难难在难在接口语言和技术资料语言上，而不是“写程序”的语言上。学过编程的朋友都知道，程序中绝大部分都是逻辑和数学表达式，与采用英语还是汉语来描述的关系实质并不大。<br/>就程序而言，不管学习编程的是谁，是中国人，还是美国人，有一个共同的难点。那就是计算机语言不是我们人类日常交流的语言，越是效率高的编程语言，越是离人们日常生活交流语言较远。这点上是共同的。<br/>而中国人真正不利之处就是如果英文不熟练，无法阅读技术文档（诸如C++、Java中上万个用英文的库函数也不是需要编程者都得记住的东西），无法理解大量的接口等英文信息。而这一点就不是简单用汉语编程那么简单了。世界上最著名的软件公司，大多是母语为英语的国家。印度现在之所以成为世界第二软件大国，因其母语是英语，这样一来在阅读和学习过程中接触相关技术就没有什么障碍。<br/>依照我们目前的发展条件，短期内不大可能出现诸如硬件、操作系统等的全国产化，这样一来如果我们还是热衷于所谓的用“汉语写”程序的话，就未免搞笑了。其实我们来看看编程的发展历史：<br/>最早期，直接对硬件编程，使用机器语言和汇编语言。<br/>后来，出现高级语言，在一定程度便于人们的理解了。<br/>再后来，出现面向对象的程序开发，使得程序开发进一步容易理解和实施。<br/>现在流行的是面向对象的可视化程序开发，每个语言本身都是“不可视”的，仅仅是语言而已；所谓“可视化”不过是编程工具所提供的功能，让你在编窗口等一些“看到着”的程序时可以使用拖拽等可视化操作。 如同C++是门语言，而vc++只是一个可视化编程工具,vc++实现了C++的可视化编程。<br/>有过较长期编程经验的老程序员都会有这演感受，在十年前写C++语言程序是很累的(那时国内还很少大家都是用C较多)，现在用C++的话，可以用VS2005多方便啊。诸如.NET代码生成器有助于快速应用程序开发。<br/>现在甚至不用写代码就可以生成很多小点的程序，这在十年前、二十年前是不可想象的，同样再过十年，不写代码生成很多今天看来是很大的程序也不是难事。所以徽剑以为在未来，程序员编程“写”的代码数量将会越来越少，程序员更多的考虑的是程序的结构和性能，然后动动鼠标，输入几个数据，一套程序就编好了。<br/>在这种情况下，更多的内容被封装了，到那时，才可以说不懂英文也照样编程。这才是发展的趋势。<br/>至于底层部分，那就只有等到国产的硬件出来了，推出大量中文指令集，才有实现真正汉语底层开发的可能。<br/><br/><br/>备注：徽剑最近很少写评论，很多网友提了些意见，因为徽剑目前正在忙一个项目，精力有限，项目现在人手紧张，如果大家能够帮徽剑介绍几个，那么徽剑自然有多的时间来写写东西。（紧急寻找1-2名精通C#或C++的开发人员参与客户端部分模块开发，最好熟悉浏览器技术。客户端大部分开发差不多了，时间紧人手不够，欢迎帮助介绍合适人选. 徽剑联系方式：QQ：543914296 MSN&E-MAIL：huijian2008@hotmail.com ）<br/><br/> <br/>
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?31</link>
<title><![CDATA[redhat下装ftp服务器(vsftpd)]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[我的收藏]]></category>
<pubDate>Sat, 31 May 2008 14:02:40 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?31</guid> 
<description>
<![CDATA[ 
	步聚：<span style="color: #ff0000"><br />1，下载源代码 http://download.chinaunix.net/down.php?id=34&amp;ResourceID=19&amp;site=1<br />2，编译源代码，可参考帮助文件INSTALL。</span><br /><span style="color: #000000"># tar zvxf vsftd-xxx.tar.gz<br /># cd vsftd-xxx<br /># more INSTALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 里面详细介绍安装过程<br /># make&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 生成二进制文件<br /># make install&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装 注意和上面的INSTALL的大小写区别<br /><span style="color: #ff0000">3，安装配置文件</span><br /></span><span style="color: #000000"># cp vsftpd.conf /etc<br /># cp RedHat/vsftpd.pam /etc/pam.d/ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp成ftp文件，不做这步，服务器无法识别用户<br /><span style="color: #ff0000">4，编辑配置文件</span><br /></span><span style="color: #000000"># vi /etc/vsftpd.conf<br />在最未尾加入 </span><span style="color: #000000">listen = YES<br /><span style="color: #ff0000">5，启动服务器</span><br /></span><span style="color: #000000"># /usr/local/sbin/vsftpd &amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0000"><br />6，创建HOME目录，也就是ftp服务器的默认目录 /var/ftp</span><br /></span><span style="color: #000000"># mkdir /var/ftp<br /># chown root.root /var/ftp<br /># chmod og-w /var/ftp<br />注：查询FTP用户可以用 # finger ftp <span style="color: #ff0000"><br />7，为了让服务开机运行，需要在/etc/rc.local编辑加入</span><br />&nbsp;&nbsp; /usr/local/sbin/vsftpd &amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就是第5步的命令<br /><span style="color: #ff0000">8，还需要编辑/etc/xinetd.d/vsftpd文件，把其中的</span></span><span style="color: #ff0000"> disable = no 改为 YES 才行</span><br /><span style="color: #000000">要不重启后连接会出现：</span>500 00PS: could not bind listening IPv4 socket！的错误，这是系统默认启动用xinetd模式。经过上面设置把FTP改成独立模式就行了。<br />---------------------------------------------------------------------------------------------------------------------------------<br />还有关于/etc/vsftpd.conf配置文件的设置项：<br />anonymouse_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #允许匿名登入<br />local_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #允许本地用户登入（一般500以下的用户无法登入）<br />write_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #允许客户端写命令 <br />local_umask=022(644)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #本地用户登入后创建文件的umask值(666-022) <br />anon_upload_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #允许匿名用户上传文件<br />anon_mkdir_write_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #允许匿名用户创建目录<br />dirmessage_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #允许使用目录消息<br />ftpd_banner=Welcome to my Ftp! &nbsp;&nbsp;&nbsp;&nbsp; #登入欢迎词<br />ls_recurse_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #允许客户端使用ls -R命令<br />listen=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #监听模式，独立运行FTP模式要使用这个<br />附：用匿名用户登入服务器默认的是不能切换上层目录，登入后用PWD看到的也是/根目录，但是如用本地用户登入，默认登入的是自己的HOME目录，使用PWD可以看到目录登入的目录，然后用cd目录切换可以切换，为了不让本地用户有这种功能，我们可以修改/<span style="color: #ff0000">etc/vsftpd.conf</span>配置文件，把其中的：<br /><span style="color: #ff0000">chroot_list_enable=yes<br />chroot_list_files=/etc/vsftpd.chroot_list </span>这两项注释去除，<br /><span style="color: #ff0000">然后再新建/etc/vsftpd.chroot_list文件</span>。。把要限制的用户加入这个文件里，格式为一个用户一行，例：<br />redhat<br />test<br />-----------------------------------------------------------------------------------------------------------------------------------<br />9，用户控制（/etc/ftpusers）<br />编辑<span style="color: #ff0000">/etc/ftpusers</span>文件，增加要限制的用户，格式为一个用户一行。<br />注：默认设置这个文件是代表拒绝用户登入的，但是我们可以通过修改<span style="color: #ff0000">/etc/pam.d/ftp</span>中的<span style="color: #ff0000">sense</span>值为<span style="color: #ff0000">allow</span>，（默认为deny），那这个文件里的用户就表示只允许登入的用户了，所以这两个是相关的。<br />-----------------------------------------------------------------------------------------------------------------------------------<br />10，为了让别人不能套出我们的帐号，我们可以建立虚拟帐号来提供连入FTP服务器（和samba的映射差不多）。<br />（1） 建立虚拟帐号文件user.txt，内容为要登入的用户名和密码，格式为，一行用户名，一行密码，例：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test &nbsp;&nbsp;&nbsp; (登入的用户名，此用户为虚拟用户，在系统中不能有此用户）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (登入的密码） <br />(2) 用db_load命令把user.txt生成一个数据库<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # db_load -T -t hash -f user.txt /etc/<span style="color: #0000ff">vsftp_login.db </span>(文件名可以自己取）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #chmod 600 /etc/vsftp_login.db&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (为了安全把此文件设成600，不让别人看到）<br />(3) 再修改/etc/pam.d/ftp文件，把其它的都注释掉，然后增加：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pam_userdb.so db=/etc/vsftp_login<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; account&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pam_userdb.so db=<span style="color: #ff0000">/etc/vsftp_login&nbsp;&nbsp;&nbsp; 这个一定要和上面创建的一样。</span><br />（4）建立虚拟帐号目录（就是虚拟用户登入进来的目录）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # useradd vuser<br />(5) 再行编辑 /etc/vsftpd.conf 文件，禁止匿名用户<br />anonymouse_enable=no &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />local_enable=yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />write_enable=no &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />anon_upload_enable=no &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />anon_mkdir_write_enable=no<br />anon_other_write_enable=no<br />guest_enable=YES<br />guest_username=vuser （就是上面创建的用户,这两项都是增加的）<br /><br />这样之后，都建好了。只有test这个虚拟用户能登入这个ftp服务器。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />把vsftpd模式做为<span style="color: #ff0000">被动模式pasv</span><br />pasv_enable=yes<br />pasv_max_port=3333<br />pasv_min_port=3323<br />保存退出<br />
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?30</link>
<title><![CDATA[无声]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[社会百态]]></category>
<pubDate>Sun, 25 May 2008 17:31:48 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?30</guid> 
<description>
<![CDATA[ 
	<p><span style="font-size: small; color: #ff0000; font-family: 隶书">相信大家都有过类似的情况,你会怎么做呢?想她们吗?无动于衷?</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/4bb2841b88be0cf4afbfc287c132ddf7.jpg" border="0" width="800" height="599" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">他手里吃过的，你吃过吗？你会吃吗？</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/ab88c1c024bbec9a4e4c79f37a909160.jpg" border="0" width="498" height="498" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">看着这张照片，你是怎么想的？</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/a49eda4a00df7b1a898caf337f51f959.jpg" border="0" width="600" height="400" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">为了几块钱的生活费</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/92251d76fa3e861153bdfc66dcd5d322.jpg" border="0" width="350" height="475" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">就是在西安，就是在这个地方，有人竟然花了３０多万吃了一顿饭</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/0cd920b50c26843fe5a151e4542ec574.jpg" border="0" width="300" height="203" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">一位老人独自抗议先行教育的收费制度</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/024b6e39bffe9a304688168ffec8d064.jpg" border="0" width="723" height="1024" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">在看看我们的孩子在什么样的教室里上课 </span> </p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/7aea1faa18de481810b4151103e648bb.jpg" border="0" width="720" height="509" /></p><p><span style="font-size: small; color: #ff0000; font-family: 隶书">还记得吗？这些所谓的明星在做秀烤肉，烤出来的糊肉竟然卖了１７８００元． </span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/191b12d3c4f0fbca6fe7e55dce84b8d3.jpg" border="0" width="300" height="400" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">就是那张在网上广泛流传，引起了无数争议的照片。我想，这张照片最大的现实意义不在于它揭示了社会巨大的贫富反差，更让人揪心的还在于－－当这两个孩子长大之后，我们又该用什么来保证他们所代表的两个阶层的和睦相处？</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/92500565f7908f4b6ee8acba198e0c10.jpg" border="0" width="662" height="1024" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">这个人曾经是西安电子科大的一个教授</span></p><p><span style="font-size: small; color: #ff0000; font-family: 隶书">注释：这个老人每天都在学校里穿行，他文革受到迫害，十分的惨。平反后却对国家没有一句怨言，现在把每个月工资全捐给了希望工程，自己捡破烂为生，不仅这样，如果每月有多余的钱也全捐了出去。</span></p><p><span style="font-size: small; color: #ff0000; font-family: 隶书">多么高尚的老人！！！！！！</span></p><p><span style="font-size: small; color: #ff0000; font-family: 隶书">他如果享受起来，比很多的人都好，她的儿子女儿全在国外，每月都给他寄很多钱，他却全捐了出去，这样的老人难道不值得大家尊敬吗？</span><br /></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/bcf98f07a8e74421104ee0343684d053.jpg" border="0" width="370" height="277" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">我可爱的儿女，我拿什么给你们幸福．．．．．．</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/ccf4fee811220762541640c6b49b18e0.jpg" border="0" width="640" height="479" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">老婆，我好着呢，吃的好睡的好，穿的也好。大城市真漂亮&hellip;&hellip;</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/5f00753c7e0e4597dbd61e1cb69d4176.jpg" border="0" width="408" height="544" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">一对卖艺的姐弟：再收紧！！！暂时的窒息，只为一顿不太美味的早餐</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/8c04bbb9e0b5e0e11b362afb8d2547f9.jpg" border="0" width="600" height="415" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">乖~~~~~~不哭，奶奶赚钱去~~~~~~送你去读书~~~~~~~</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/369509c51dd4f9cb50c07a567e4fb76e.jpg" border="0" width="567" height="451" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">不是我影响市容~~~~~~~~~ 我很饿~~~~~~~~</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/8962784b1b84f8f0c0ad3e9d77988e88.jpg" border="0" width="563" height="386" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">为了能上学，每天去给一家窑厂背砖坯，她每次背16块，重40公斤，走140米，只得3分3厘工钱</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/aa5d24715c98ffd1f123cf2d57dc2b9b.jpg" border="0" width="450" height="330" /></p><br /><p><span style="font-size: small; color: #ff0000; font-family: 隶书">少年不言愁~~~~至少你可以让自己和老迈的母亲填饱肚子~~应该羞涩的是那些哈日哈韩的混帐阔少。</span></p><br /><p><img src="http://pic1.xilu.com/195/390509/781019092/122398e574a312bc192ee7d54553f011.jpg" border="0" width="300" height="465" /></p><br /><p><strong><span style="font-size: small; color: #ff0000; font-family: 楷体_GB2312">你什么感受呢？这些事发生在你身边过吗？为了让更多人看到这些无法言语的图片，希望你能回个帖，哪怕一个&rdquo;顶&rdquo;字！</span></strong></p><br/>Tags - <a href="http://blog.thulu.com/tag.php?tag=%25E6%2597%25A0%25E5%25A3%25B0" rel="tag">无声</a> , <a href="http://blog.thulu.com/tag.php?tag=%25E6%2583%2585%25E6%2584%259F" rel="tag">情感</a>
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?29</link>
<title><![CDATA[5人过河问题的程序实现的讨论（转）]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[我的作品]]></category>
<pubDate>Tue, 29 Apr 2008 16:25:46 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?29</guid> 
<description>
<![CDATA[ 
	有一家人共5口需要在夜里过河，河上只有一座桥，每次最多同时可以有两个人同时过河。由于在夜中，必须使用手电筒来照明。且目前只有一支手电，并且该手电还可以供电30mins。已知5个人（设为A，B，C，D，E）过河的时间分别为（单位：min）：1、3、6、8、12。求5个人在30mins之内过河的方法。<br/> <br/>分析：<br/> <br/>1、每次必须有两个人一起过河，然后由另一个人将手电筒带回来。依次组合过河。所以我们可以知道，一定需要过河4次，回来3次，共需要7次往返。<br/>2、每次回来的人，必定是已经过河的人中，时间最短的那个人。否则可以推出错误，即还可以有更短的时间来达到目的。<br/> <br/>解决方法：<br/> <br/>如果单纯最为一道智力题目来说，还是比较简单的。我们设元组（A，B，C）表示每次过河的人为A，B，回来的人为C，如果没有此人（即最后一次不需要人在回来，则用×表示。<br/> <br/>那么一般最快给出的答案就是:<br/>&nbsp;&nbsp; (A,B,A)<br/>(A,C,A)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(A,D,A)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (A,E,×)<br/>不过不幸的是，这样最后的时间花费cost=3+1+6+1+8+1+12=32(mins)<br/>&nbsp;&nbsp;&nbsp;&nbsp; 稍加思考即可得到一个答案为：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (A,B,A)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (C,D,B)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (A,B,A)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(A,C,×)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样最后的时间花费cost=3+1+12+3+3+1+6=29(mins)比规定的时间还少1min.<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果用C来实现的话，这个问题可以用递规来解决，一旦发现时间满足最后的要求的话，就可以返回成功状态，跳出递规，然后将解决步骤保存在一个栈中，打印出来即可。将步骤保存在栈中的目的就是为了当递规搜索在当前步骤失败的话，可以弹出，并返回上一层继续下一个可能的搜索。<br/> <br/>程序如下：程序里面大部分注释用的是英文，由于水平有限，所以有Chinese English的感觉，欢迎大家多多讨论，写的不好，大家多包涵：）<br/>#include <stdlib.h><br/><br/>#include <stdio.h><br/><br/> <br/><br/>#define MAXTIME 30<br/><br/>#define MAX 100<br/><br/>#define UNDEF -3<br/><br/>#define CROSSED -1<br/><br/>#define UNCROSS -2<br/><br/>#define SUCCESS 1<br/><br/>#define FAILURE 0<br/><br/> <br/><br/>typedef struct team&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int a;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int b;<br/><br/>&#125; team;<br/><br/> <br/><br/>//generate the factorial value of m<br/><br/>int factorial(int m)<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(m==0)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m*factorial(m-1);<br/><br/>&#125;<br/><br/> <br/><br/>//generate the value of C(2,cnt)<br/><br/>team* gen(int* can,int cnt,int* gencnt)<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i,j,k;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;team* t;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cnt<2)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//formula to compute the combination<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*gencnt=factorial(cnt)/(factorial(2)*factorial(cnt-2));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t = malloc(*gencnt*sizeof(team));<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<cnt;i++)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(j=i+1;j<cnt;j++)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t[k].a =&nbsp;&nbsp;can[i]==CROSSED ? CROSSED:i;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t[k].b =&nbsp;&nbsp;can[j]==CROSSED ? CROSSED:j;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k++;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return t;<br/><br/>&#125;<br/><br/> <br/><br/>/* indicate 5 persons to cross river*/<br/><br/>int person[5];<br/><br/> <br/><br/>/* the unit to record the process */<br/><br/>struct Process<br/><br/>&#123;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int GoA;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int GoB;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int BackA;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int cost;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cost’s value when this step over<br/><br/>&#125;;<br/><br/> <br/><br/>/* the stack to store the process*/<br/><br/>struct Process process[4];<br/><br/> <br/><br/>/* the pointer to current process, from 0 to 3*/<br/><br/>unsigned int cur;<br/><br/> <br/><br/>/* the costed time, set it as global for reversing */<br/><br/>unsigned int cost = 0;<br/><br/> <br/><br/>/* indicate no person has cross at the begining */<br/><br/>int cross[5] = &#123;UNCROSS,UNCROSS,UNCROSS,UNCROSS,UNCROSS&#125;;<br/><br/> <br/><br/>/*inital the person[5]*/<br/><br/>void initPerson()<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person[0] = 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person[1] = 3;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person[2] = 6;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person[3] = 8;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person[4] = 12;<br/><br/>&#125;<br/><br/> <br/><br/>/* inital the process[7] */<br/><br/>void initProcess()<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( i=0;i<4;i++ )<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; process[i].GoA = process[i].GoB = process[i].BackA = UNDEF;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; process[i].cost = 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur = 0;<br/><br/>&#125;<br/><br/> <br/><br/>/* print the whole process to resolve the problem */<br/><br/>void printProcess()<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i = 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( i=0;i<3;i++ )<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%c & %c cross, %c back&#92;n", process[i].GoA+'A',process[i].GoB+'A',<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process[i].BackA+'A');<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%c & %c cross, the process is over&#92;n", process[i].GoA+'A',process[i].GoB+'A');<br/><br/>&#125;<br/><br/> <br/><br/>/* select at most 2 persons to cross the river once */<br/><br/>void selectToGo(int a, int b)<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[a] = CROSSED;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[b] = CROSSED;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost+= person[a]>person[b] ? person[a]:person[b];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process[cur].GoA = a;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process[cur].GoB = b;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process[cur].cost = cost;<br/><br/>&#125;<br/><br/> <br/><br/>int selectToBack()<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i,j,cnt=0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int t=MAX;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* select one person whose time is minimum from the persons that have crossed the river*/<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( i=0;i<5;i++ )<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( cross[i] == CROSSED)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(t>person[i])<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t = person[i];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = i;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnt++;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (cnt==5)&nbsp;&nbsp;//indicate all 5 persons have crossed river<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* back */<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[j] = UNCROSS;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process[cur].BackA = j;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost += person[j];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process[cur].cost = cost;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br/><br/>&#125;<br/><br/> <br/><br/>/* compute the number of uncross the river */<br/><br/>int left()<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i,j=0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<5;i++)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(cross[i]==UNCROSS)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return j;<br/><br/>&#125;<br/><br/> <br/><br/>/* the recursion function to simulate the process of crossing the river */<br/><br/>int Go()<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;team* t;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int gencnt;<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (left()<2)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SUCCESS;<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=gen(cross,5,&gencnt);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<gencnt;i++)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(t[i].a!=CROSSED&&t[i].b!=CROSSED)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selectToGo(t[i].a, t[i].b);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selectToBack();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(cost<=MAXTIME)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur++;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Go(left())==SUCCESS)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return SUCCESS;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[process[cur].BackA] = CROSSED;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[process[cur].GoA] = UNCROSS;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[process[cur].GoB] = UNCROSS;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost = process[cur-1].cost;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//说明当前cost大于了MAXTIME,所以应该恢复此步之前的状态<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//并取下一个可能的组合，进行测试<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[process[cur].BackA] = CROSSED;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[process[cur].GoA] = UNCROSS;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross[process[cur].GoB] = UNCROSS;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost = process[cur-1].cost;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果所有的可能组合都失败了,那么就要倒退回上一个步骤<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择下一个组合进行测试<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur--;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FAILURE;<br/><br/>&#125;<br/><br/> <br/><br/>int main(int argc, char* argv[])<br/><br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* init 5 persons first */<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initPerson();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initProcess();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Go();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* print the process */<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("The process are : &#92;n");<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printProcess();<br/><br/>&#125;<br/><br/>
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?28</link>
<title><![CDATA[ 微软面试题目完全版－－转自exce4的blog]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[我的收藏]]></category>
<pubDate>Tue, 29 Apr 2008 16:23:35 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?28</guid> 
<description>
<![CDATA[ 
	网上有不少Microsoft的测试题，引来不少的眼光。在这里把所有的测试题加以整理，再附上答案。（个别题目答案有多种，文本仅代表作者的思路）每道题的后面会给出一个时间。这个时间是作者做出该题所用的时间。（注意，这不是什么标准时间，相信所有浏览本试卷的朋友都会在某一道或多道题上找到灵感，迅速解题的） <br/><br/>一．最基本题型（说明：此类题型比较简单） <br/>1.烧一根不均匀的绳，从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子，问如何用烧绳的方法来计时一个小时十五分钟呢？（这道题有点BT） <br/>2.你有一桶果冻，其中有黄色、绿色、红色三种，闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻？（5秒-1分钟，呵呵，看了答案才知道很简单） <br/>3.如果你有无穷多的水，一个3公升的提捅，一个5公升的提捅，两只提捅形状上下都不均匀，问你如何才能准确称出4公升的水？（40秒-3分钟） <br/>4.一个岔路口分别通向诚实国和说谎国。来了两个人，已知一个是诚实国的，另一个是说谎国的。诚实国永远说实话，说谎国永远说谎话。现在你要去说谎国，但不知道应该走哪条路，需要问这两个人。请问应该怎么问？（20秒-2分钟） <br/>5.12个球一个天平，现知道只有一个和其它的重量不同，问怎样称才能用三次就找到那个球。13个呢？（注意此题并未说明那个球的重量是轻是重，所以需要仔细考虑）（5分钟-1小时） <br/>6.在9个点上画10条直线，要求每条直线上至少有三个点？（3分钟-20分钟） <br/>7.在一天的24小时之中，时钟的时针、分针和秒针完全重合在一起的时候有几次？都分别是什么时间？你怎样算出来的？（5分钟-15分钟） <br/><br/>二．没有答案型（说明：这些题显然不是考你智力。而考的是你的反应能力。这种题大多数没有答案，但是要看你的反应喽！） <br/>1.为什么下水道的盖子是圆的？ <br/>2.中国有多少辆汽车？ <br/>3.将汽车钥匙插入车门，向哪个方向旋转就可以打开车锁？ <br/>4.如果你要去掉中国的34个省（含自治区、直辖市和港澳特区及台湾省）中的任何一个，你会去掉哪一个，为什么？ <br/>5.多少个加油站才能满足中国的所有汽车？ <br/>6.想象你站在镜子前，请问，为什么镜子中的影象可以颠倒左右，却不能颠倒上下？ <br/>7.为什么在任何旅馆里，你打开热水，热水都会瞬间倾泻而出？ <br/>8.你怎样将Excel的用法解释给你的奶奶听？ <br/>9.你怎样重新改进和设计一个ATM银行自动取款机？ <br/>10.如果你不得不重新学习一种新的计算机语言，你打算怎样着手来开始？ <br/>11.如果你的生涯规划中打算在5年内受到奖励，那获取该项奖励的动机是什么？观众是谁？ <br/>12.如果微软告诉你，我们打算投资五百万美元来启动你的投资计划，你将开始什么样商业计划？为什么？ <br/>13.如果你能够将全世界的电脑厂商集合在一个办公室里，然后告诉他们将被强迫做一件事，那件事将是什么？ <br/><br/>三．难题（说明：这类题有一定难度，如果得不到答案，也不能说明什么。如果你想到了解题思路，那么答案马上就能出来。如果想不到思路，那么……就别想解出来了。） <br/>1.你让工人为你工作7天，回报是一根金条，这个金条平分成相连的7段，你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断，你如何给你的工人付费？ <br/>2.有一辆火车以每小时15公里的速度离开北京直奔广州，同时另一辆火车每小时20公里的速度从广州开往北京。如果有一只鸟，以30公里每小时的速度和两辆火车同时启动，从北京出发，碰到另一辆车后就向相反的方向返回去飞，就这样依次在两辆火车之间来回地飞，直到两辆火车相遇。请问，这只鸟共飞行了多长的距离？ <br/>3.你有四个装药丸的罐子，每个药丸都有一定的重量，被污染的药丸是没被污染的药丸的重量+1。只称量一次，如何判断哪个罐子的药被污染了？ <br/>4.门外三个开关分别对应室内三盏灯，线路良好，在门外控制开关时候不能看到室内灯的情况，现在只允许进门一次，确定开关和灯的对应关系？ <br/>5.人民币为什么只有1、2、5、10的面值？ <br/>6.你有两个罐子以及50个红色弹球和50个蓝色弹球，随机选出一个罐子， 随机选出一个弹球放入罐子，怎么给出红色弹球最大的选中机会？在你的计划里，得到红球的几率是多少？ <br/><br/>四．超难题（说明：如果你是第一次看到这种题，并且以前从来没有见过类似的题型，并且能够在半个小时之内做出答案。只能说明你的智力超常……） <br/><br/>第一题 . 五个海盗抢到了100颗宝石，每一颗都一样大小和价值连城。他们决定这么分： <br/>抽签决定自己的号码（1、2、3、4、5） <br/>首先，由1号提出分配方案，然后大家表决，当且仅当超过半数的人同意时，按照他的方案进行分配，否则将被扔进大海喂鲨鱼 <br/>如果1号死后，再由2号提出分配方案，然后剩下的4人进行表决，当且仅当超过半数的人同意时，按照他的方案进行分配，否则将被扔入大海喂鲨鱼 <br/>依此类推 <br/>条件：每个海盗都是很聪明的人，都能很理智地做出判断，从而做出选择。 <br/>问题：第一个海盗提出怎样的分配方案才能使自己的收益最大化？ <br/><br/>第二题 . 一道关于飞机加油的问题，已知： <br/>每个飞机只有一个油箱， <br/>飞机之间可以相互加油（注意是相互，没有加油机） <br/>一箱油可供一架飞机绕地球飞半圈， <br/>问题： <br/>为使至少一架飞机绕地球一圈回到起飞时的飞机场，至少需要出动几架飞机？（所有飞机从同一机场起飞，而且必须安全返回机场，不允许中途降落，中间没有飞机场） <br/><br/>五．主观题（说明：在以后的工作过程中，我们可定会犯这样那样的错误。既然错误已经酿成，损失在所难免，我们只能想办法把损失减少到最小。如果能巧妙地回答出这些问题，再发生错误的情况下。能让客户有最少的抱怨，公司有最少的损失。） <br/>1.某手机厂家由于设计失误，有可能造成电池寿命比原来设计的寿命短一半（不是冲放电时间），解决方案就是免费更换电池或给50元购买该厂家新手机的折换券。请给所有已购买的用户写信告诉解决方案。 <br/>2.一高层领导在参观某博物馆时，向博物馆馆员小王要了一块明代的城砖作为纪念，按国家规定，任何人不得将博物馆收藏品变为私有。博物馆馆长需要如何写信给这位领导，将城砖取回。 <br/>3.营业员小姐由于工作失误，将2万元的笔记本电脑以1.2万元错卖给李先生，王小姐的经理怎么写信给李先生试图将钱要回来？ （这道题超级BT，Fly.C4推荐您必看！）<br/><br/>六.算法题（说明：这些题就不是什么花样了，考的是你的基础知识怎么样。再聪明而没有实学的人都将会被这些题所淘汰。） <br/>1.链表和数组的区别在哪里？ <br/>2.编写实现链表排序的一种算法。说明为什么你会选择用这样的方法？ <br/>3.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法？ <br/>4.请编写能直接实现strstr()函数功能的代码。 <br/>5.编写反转字符串的程序，要求优化速度、优化空间。 <br/>6.在链表里如何发现循环链接？ <br/>7.给出洗牌的一个算法，并将洗好的牌存储在一个整形数组里。 <br/>8.写一个函数，检查字符是否是整数，如果是，返回其整数值。（或者：怎样只用4行代码编写出一个从字符串到长整形的函数？） <br/>9.给出一个函数来输出一个字符串的所有排列。 <br/>10.请编写实现malloc()内存分配函数功能一样的代码。 <br/>11.给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。 <br/>12.怎样编写一个程序，把一个有序整数数组放到二叉树中？ <br/>13.怎样从顶部开始逐层打印二叉树结点数据？请编程。 <br/>14.怎样把一个链表掉个顺序（也就是反序，注意链表的边界条件并考虑空链表）？ <br/><br/><br/>［解答与提示］ <br/><br/>一．最基本题型 <br/>1.一要一头烧，一根从两头烧，再有一根做参照，两头烧完的记下位置（即烧到这里要半小时），把参照的那根从标记位置处剪开，取其中一段A。 <br/>一头烧的那根烧完后（就是一个小时后），把A从两头开始烧，烧完后即为十五分钟，加起来共一小时十五分钟。 <br/>2.4个。 <br/>3.大桶装满水，倒入小桶，大桶剩下2公升水。小桶水倒掉，大桶剩2公升水倒入小桶中，大桶再装满后，倒入小桶至小桶满，大桶即剩４公升 <br/>4.如果参加过类似于奥林匹克数学班的，都应做过这些题。问他你的国家怎么走，他肯定指向的是诚实国。 <br/>5.12个时可以找出那个是重还是轻，13个时只能找出是哪个球，轻重不知。 <br/>把球编为①②③④⑤⑥⑦⑧⑨⑩⑾⑿。（13个时编号为⒀） <br/>第一次称：先把①②③④与⑤⑥⑦⑧放天平两边， <br/>　　㈠如相等，说明特别球在剩下4个球中。 <br/>　　　　把①⑨与⑩⑾作第二次称量， <br/>　　　　⒈如相等，说明⑿特别，把①与⑿作第三次称量即可判断是⑿是重还是轻 <br/>　　　　⒉如①⑨<⑩⑾说明要么是⑩⑾中有一个重的，要么⑨是轻的。 <br/>　　　　　　把⑩与⑾作第三次称量，如相等说明⑨轻，不等可找出谁是重球。 <br/>　　　　⒊如①⑨>⑩⑾说明要么是⑩⑾中有一个轻的，要么⑨是重的。 <br/>　　　　　　把⑩与⑾作第三次称量，如相等说明⑨重，不等可找出谁是轻球。 <br/>　　㈡如左边<右边，说明左边有轻的或右边有重的 <br/>　　　　把①②⑤与③④⑥做第二次称量 <br/>　　　　⒈如相等，说明⑦⑧中有一个重，把①与⑦作第三次称量即可判断是⑦与⑧中谁是重球 <br/>　　　　⒉如①②⑤<③④⑥说明要么是①②中有一个轻的，要么⑥是重的。 <br/>　　　　　　把①与②作第三次称量，如相等说明⑥重，不等可找出谁是轻球。 <br/>　　　　⒊如①②⑤>③④⑥说明要么是⑤是轻的，要么③④中有一个是重的。 <br/>　　　　　　把③与④作第三次称量，如相等说明⑤轻，不等可找出谁是重球。 <br/>　　㈢如左边>右边，参照㈡相反进行。 <br/>当13个球时，第㈠步以后如下进行。 <br/>　　把①⑨与⑩⑾作第二次称量， <br/>　　⒈如相等，说明⑿⒀特别，把①与⑿作第三次称量即可判断是⑿还是⒀特别，但判断不了轻重了。 <br/>　　⒉不等的情况参见第㈠步的⒉⒊ <br/>6. 见下面的点　10条线的情况是 123 456 789 148 159 247 258 269 357 368 <br/>①　②　③ <br/><br/>　④⑤⑥ <br/><br/>⑦　⑧　⑨ <br/><br/>7.注意是24小时不是１２小时。 <br/>首先考察时针与分针的情况，很容易看出分针转一圈与时针只重合一次，就是一小时一次。但11时与0时的分钟区内共享一个重合点，所只24 <br/><br/><br/>二．没有答案型 <br/>1.圆井盖掉不下去 <br/>2.一千万 <br/>3.顺时针方向。 <br/>4. <br/>5.十万个 <br/>6.答案是"This feature is by design." 如果考官要求给出更加合理的解释，就对他说："如果您对此问题有更多疑问，请与它的供应商（或者与它的发明人）联系"。 答案是眼睛是左右长着的。 <br/>7.如果不倾泻而出，这家旅馆将没有人去住。 <br/>8.告诉她这是最先进的东西，她不需要动手，我来帮她做就可以。 <br/>9.我想斯皮尔伯格来回答这道题是在合适不过得了。 <br/>10.我觉得回放飞网呆上半个月比较合适。 <br/>11.这题我没有任何想法，因为没有工作经验，所以完全没听明白他问的是什么！ <br/>12.做微软的OEM，这样能够更好的服务微软。 <br/>13.把主机箱集成在一个液晶显示器中！ 只准开发我们认证的驱动！ <br/><br/>三．难题 <br/>1.切两刀，分为1/7、2/7、4/7三段。第一天给1/7；第二天给2/7，要回1/7；第三天给1/7 ；第四天给4/7 要回1/7+2/7；第五天给1/7；第六天给2/7，要会1/7；第七天给1/7 <br/>2.北京到广州距离的30/35。 <br/>3.依次从四个罐子中取出1、2、3、4个药丸，设第一丸子应重为X，称得的重量是10X+t,t是几就是第几个罐子污染了。 <br/>4.先开一个，开很长时间。然后关掉，再开另一个。出去看，亮着的那个不用说。剩下的两个不亮的，按照灯泡的温度来进行判断。 <br/>5.可以用三张以内组成任何面额。 <br/>6.不清楚。可能是50%。 <br/><br/>四.超难题 <br/>一) 设5个人分别是①②③④⑤ <br/>假设前面的都扔海里了，由④来分，无论他怎么分（包括全给⑤），都面临被否决扔海里的危险。 <br/>所以，当③来分时，④⑤一个不给，全由③独吞，④为了避免被扔海里的危险，也要同意，③的方案成立。 <br/>那么，在②分时，③是肯定要反对的，要赢得④⑤的同意，必须多给一个，否则有可能否决（对④⑤来说，反正③来分时还是0,你不多给一个就否决），所以②的分配方案一定是：②98　③0　④1　⑤1 <br/>回到①来的分配，由于②肯定反对，为了赢得③④⑤的同意，必须在②分配方案的基础上给他们加一个，由于只需再争取两票，③④⑤中可以 <br/><br/>排除争取一个，从收益来说，排除④⑤中的一个即可，那么①的分配方案为：①97　③1　④(或⑤)1 其它都不给！ <br/><br/>二) 如果机场本身不可以加油的话　那么最少需要４架 <br/>３架同时起飞，到1/6圈时，两架飞机把各自油箱中的1/3加给另外一架，这两架剩的油正好可以原路飞回，被加油机可以飞到5/6圈处。 <br/>第４架飞机在环球飞机飞到4/6圈时起飞去接应，两飞机在5/6圈处相遇，环球机刚好用完油，加油机把1/3的油给环球机，两飞机刚好都能飞回 <br/><br/><br/>五.主观题 <br/>1.告诉用户我公司为答谢广大顾客长时间以来的厚爱，顾客可以持原电池免费更换使用寿命为原电池一倍的新型电池。或者可以持购买发票，获得50元购买该厂家新手机的折换券。 <br/>2.信件如下： <br/>"xxx领导：您好！ <br/>我馆近期将展出一批珍贵文物，让更多的人能够真正的体会到中华民族文明的悠久、灿烂。我们希望能将您所拥有的明代的城砖展出。并且我们将在博物馆内设置专栏，宣传您对中华民族悠久文化的保存所作出的巨大贡献，让更多的华夏子孙看到，并且亲身体验到华夏文明的悠久历史，从而加强中华民族的凝聚力！" <br/>解释： <br/>领导看过这封信以后，如果不拿出城砖。那么也就说明他不想让更多的人看到中华民族的灿烂文明，不想让中华民族有更强的凝聚力。自然也就会拿出城砖。如果领导问到何时展出完毕，可以告诉他博物馆希望永久展出这些物品，领导自然也就无话可说了。 <br/><br/>3.信件如下： <br/>" 尊敬的顾客，您好！ <br/>由于工作人员的失误，误将一台样品机卖给您。为了您能够更好的使用我公司的产品，我公司决定为您免费更换同等价位的笔记本一台。并且我们有性价比更加优越的xxxII 型笔记本电脑，售价20000元人民币。如果您此时购买，我们将会以19000元的优惠价格售出。" <br/><br/><br/>六．算法题 <br/>请参考数据结构和计算机算法类书籍，作者就不再抄书了。 <br/><br/>附（1）：烧绳子类问题总结： <br/>一般给出的绳子都是不均匀的。如果一根为一小时，那么半个小时的计算方法是从两头烧。十五分钟的计算方法是从两头烧，同时从中间任何一个地方开始烧，这样这根绳子就有四个燃烧点，时间自然是一个燃烧点的四分之一。如果计算十分钟的时间，那么就让绳子有六个燃烧点，方法就不用说了吧！ <br/><br/>附（2）：天平称球问题解答以及总结： <br/>将球分为a b c d； e f g h； i j k l 三组。 <br/><br/>第一次称量，比较 abcd efgh <br/><br/>情形一： <br/>两者重量相等，此时说明答案在ijkl中。 <br/>称量ij， <br/>如果相等,说明答案在kl中。拿k与a比较，如果相等，答案为l；如果不等，答案为k。 <br/>如果不等，说明答案在ij中。拿i与a比较，如果相等，答案为j；如果不等，答案为i。 <br/><br/><br/>情形二： <br/>abcd轻。 <br/>在efgh中取出fgh，替换掉abcd中的bcd。 在ijkl中取出jkl，补充到原来fgh的位置。 <br/>如果afgh轻，说明答案为a或e。称量ab，如果相等，答案为e；如果不等，答案为a。 <br/>如果afgh重，说明答案在fgh中。称量fg，如果相等，答案为h；如果不等，重者为答案。 <br/>如果一样重，答案在bcd中。称量bc，如果相等，答案为d；如果不等，轻者为答案。 <br/><br/>情形三： <br/>abcd重。 <br/>在efgh中取出fgh，替换掉abcd中的bcd。 在ijkl中取出jkl，补充到原来fgh的位置。 <br/>如果afgh重，答案为a或e。称量ab，如果相等，答案为e；如果不等，答案为a。 <br/>如果afgh轻，答案在fgh中。称量fg，如果相等，答案为h；如果不等，轻者为所求。 <br/>如果一样重，答案在bcd中。称量bc，如果相等，答案为d；如果不等，重者为答案。 <br/><br/>至于13个球的称法，至今本人仍没想出来。望高手赐教。 <br/><br/>总结：（转载） <br/>天平称重，有两个托盘比较轻重，加上托盘外面，也就是每次称重有3个结果，就是ln3/ln2比特信息。n个球要知道其中一个不同的球，如果知道那个不同重量的球是轻还是重，找出来的话那就是n个结果中的一种，就是有ln（n）/ln2比特信息，如果不知道轻重，找出来就是2n（n个球中的一个，轻或者重，所以是2n）个结果中的一种，那就是ln（2n）/ln2比特信息。 <br/><br/>假设我们要称k次，根据信息理论，那显然两种情况就分别有： <br/>1. k*ln3/ln2>=ln（n）/ln2　（k>=1）　解得k>=ln（n）/ln3 <br/>2. k*ln3/ln2>=ln（2n）/ln2　（k>1）　解得k>=ln（2n）/ln3 <br/>这是得到下限，可以很轻易证明满足条件的最小正整数k就是所求。比如称3次知道轻重可以从3^3=27个球中找出不同的球出来，如果不知道轻重就只能从（3^3-1）/2=13个球中找出不同的球出来。<br/>
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?27</link>
<title><![CDATA[（转）VB编写病毒的一般思路]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程技术]]></category>
<pubDate>Sat, 5 Apr 2008 08:40:35 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?27</guid> 
<description>
<![CDATA[ 
	相信电脑界的每个人都痛恨计算机病毒，她给我们带来了很多麻烦和损失，可你知道编写病毒的方法和过程吗？在此我仅以VB编写为例，揭开她的面纱。 <br/><br/>用VB编写病毒需要考虑到如下几点： <br/><br/>* 感染主机 <br/>~~~~~~~~~~ <br/>首先染毒文件运行后先要判断主机是否以感染病毒，也就是判断病毒主体文件是否存在，如果不存在则将病毒主体拷贝到指定位置(如： <br/>将病毒文件拷贝到c:&#92;windows&#92;system&#92;)，可用filecopy语句实现；如果病毒已感染主机则结束判断。 <br/><br/>例如，判断C:&#92;windows&#92;system&#92;Killer.exe是否存在，如果有则退出判断，如果没有则证明本机未感染病毒，立即拷入病毒文件。 <br/>病毒源文件名为game.exe <br/><br/>声明部分： <br/>’’定义 FileExists% 函数 <br/>public success% <br/>Function FileExists%(fname$) <br/>On Local Error Resume Next <br/>Dim ff% <br/>ff% = FreeFile <br/>Open fname$ For Input As ff% <br/>If Err Then <br/>FileExists% = False <br/>Else <br/>FileExists% = True <br/>End If <br/>Close ff% <br/>End Function <br/>代码部分： <br/>’’判断文件是否存在 <br/>success% = FileExists%("C:&#92;windows&#92;system&#92;Killer.exe") <br/>If success% = False Then ’’病毒不存在则拷贝病毒到计算机 <br/>FileCopy "game.exe", "C:&#92;windows&#92;system&#92;Killer.exe" <br/>... ’’修改注册表，将其加入RUN中。(省略若干代码) <br/>End If <br/><br/>* 开机启动病毒 <br/>~~~~~~~~~~~~~~ <br/>在病毒感染主机的同时，将自身加入注册表的开机运行中，这与向主机拷入病毒是同时进行的，主机感染后不再修改注册表。可通过编程 <br/>和调用API函数对WIN注册表进行操作来实现，这样在每次启动计算机时病毒自动启动。(具体编写方法请查阅其它资料) <br/><br/>* 任务管理器 <br/>~~~~~~~~~~~~ <br/>在任务管理器列表中禁止病毒本身被列出，可以通过编程来实现。 <br/>用代码 App.TaskVisible = false 就可以实现；再有就是通过调用Win API函数来实现，这里就不作介绍了。 <br/><br/>* 病毒发作条件 <br/>~~~~~~~~~~~~~~ <br/>可用Day(Date)来判断今天是几号，再与确定好的日期作比较，相同则表现出病毒主体的破坏性，否则不发作。也可用Time、Date或其它方 <br/>法作为病毒发作条件的判断。 <br/>例： <br/>if day(date)=16 then ’’16是发作日期，取值为1-31的整数 <br/>... ... ’’kill ******* 当日期相符时运行的破坏性代码(格式化、删除指定的文件类型、发送数据包杜塞网路等，省略若干代码) <br/>end if <br/><br/>* 病毒的破坏性 <br/>~~~~~~~~~~~~~~ <br/>编写的此部分代码决定了病毒威力的强弱。轻的可以使系统资源迅速减少直至死机(需要你懂得一点蠕虫的原理)，也就是实现开机即死的 <br/>效果；也可以加入硬盘炸弹代码、系统后台删文件等。重的可以使计算机彻底瘫痪(不作介绍，你可以参阅其它病毒的有关资料)。 <br/><br/>* 病毒的繁殖 <br/>~~~~~~~~~~~~ <br/>原理很简单，就是将其自身与其它可执行文件合并，也就是两个文件并成一个文件。也可通过E-Mail传播，方法是病毒读取被感染主机的 <br/>邮件列表，将带有病毒附件的E-Mail发给列表中的每一个人(这需要你懂得VB网络编程)。 <br/><br/>读完本文章相信您已对病毒的编写思路有了初步的了解，如果你是个VB爱好者，你已经可以编写一个很简单的病毒了，但你要是精通VB的话，请不要有编写后传播她的想法，因为传播她造成很大的影响将改变你的命运(被公安抓住就挂了)。&nbsp;&nbsp;<br/>
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?26</link>
<title><![CDATA[PHP中重新定向到另一个页面(php转向)]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程技术]]></category>
<pubDate>Sat, 22 Mar 2008 08:07:22 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?26</guid> 
<description>
<![CDATA[ 
	有三种办法，供参考。&nbsp;&nbsp;<br/><br/>一、用HTTP头信息&nbsp;&nbsp;<br/><br/>也就是用PHP的HEADER函数。PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令，例如声明返回信息的类型("Context-type: xxx/xxx")，页面的属性("No cache", "Expire")等等。&nbsp;&nbsp;<br/>用HTTP头信息重定向到另外一个页面的方法如下：&nbsp;&nbsp;<br/><br/><div class="code">&lt;?&nbsp;&nbsp;<br/>if (isset($url))&nbsp;&nbsp;<br/>&#123;&nbsp;&nbsp;<br/>Header(&quot;HTTP/1.1 303 See Other&quot;);&#91;感谢李凌先生&#93;&nbsp;&nbsp;<br/>Header(&quot;Location: $url&quot;);&nbsp;&nbsp;<br/>exit;&nbsp;&nbsp;<br/>&#125;&nbsp;&nbsp;<br/>?&gt; </div><br/><br/>注意一下，"Localtion:"后面有一个空格。&nbsp;&nbsp;<br/><br/>二、用HTML标记&nbsp;&nbsp;<br/><br/>用HTML标记，就是用META的REFRESH标记，举例如下：&nbsp;&nbsp;<br/><br/><div class="code">&lt;? if (!isset($url)) exit;?&gt;&nbsp;&nbsp;<br/>&lt;HTML&gt;&nbsp;&nbsp;<br/>&lt;HEAD&gt;&nbsp;&nbsp;<br/>&lt;META HTTP-EQUIV=&quot;REFRESH&quot; CONTENT=&quot;5; URL=&lt;? echo $url;?&gt;&gt;&nbsp;&nbsp;<br/>&lt;/HEAD&gt;&nbsp;&nbsp;<br/>&lt;BODY&gt;&nbsp;&nbsp;<br/>&lt;/BODY&gt;&nbsp;&nbsp;<br/>&lt;/HTML&gt;&nbsp;&nbsp;</div><br/><br/>三、用脚本来实现&nbsp;&nbsp;<br/><br/>举例如下：&nbsp;&nbsp;<br/><br/><div class="code">&lt;?&nbsp;&nbsp;<br/>$url=&quot;http://www.phpuser.com&quot;;&nbsp;&nbsp;<br/>echo &quot;&lt;!--&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;&quot;;&nbsp;&nbsp;<br/>echo &quot;location.href=’$url’&quot;;&nbsp;&nbsp;<br/>echo &quot;&lt;/SCRIPT&gt;--&gt;&quot;;&nbsp;&nbsp;<br/>?&gt;&nbsp;&nbsp;</div>
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?25</link>
<title><![CDATA[电脑笔记本 Windows XP OEM 激活码 ]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[我的收藏]]></category>
<pubDate>Sat, 22 Mar 2008 06:06:51 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?25</guid> 
<description>
<![CDATA[ 
	FCDGH-QW3DJ-VBC6C-9BYTX-4GKQJ XXXXX-OEM-0011903-00155 联想（明基） LENOVO XP PRO SP1<br/>XJM6Q-BQ8HW-T6DFB-Y934T-YD4YT XXXXX-OEM-0011903-00102 戴尔 DELL XP PRO SP1<br/>BW2VG-XXDY6-VW3P7-YHQQ6-C7RYM XXXXX-OEM-0011903-00100 宏基 ACER XP PRO SP1<br/>HCBR8-FGC2K-RY7BM-HM3KT-BKVRW XXXXX-OEM-0011903-00107 IBM IBM XP PRO SP1<br/>DMQBW-V8D4K-9BJ82-4PCJX-2WPB6 XXXXX-OEM-0011903-00106 惠普 HP XP PRO<br/>KYKVX-86GQG-2MDY9-F6J9M-K42BQ XXXXX-OEM-0011903-00101 康柏 COMPAQ XP PRO<br/>- - - - XXXXX-OEM-0011903-00167 七喜 HEDY XP PRO SP1<br/>ZM68XC-TX2C9-PKK8H-GP8JH-RC8XB XXXXX-OEM-0011903-00180 清华同方 THTF XP PRO SP1<br/>F4G2M-BH2JF-GTGJW-W82HY-VMRRQ XXXXX-OEM-0011903-00297 方正 FONDER XP PRO SP1<br/>- - - - XXXXX-OEM-0011903-00108 三星 SAMSUNG XP PRO SP1<br/>- - - - XXXXX-OEM-0011903-00111 东芝 TOSHIBA XP PRO SP1<br/>- - - - XXXXX-OEM-0011903-00161 TCL TCL XP PRO SP1<br/>C873T-F3X3M-9F6TR-J26GM-YTKKD XXXXX-OEM-0011903-00117 富士通 FUJITSU XP PRO SP1<br/>- - - - XXXXX-OEM-0011903-001 华硕 ASUS XP PRO SP1<br/>K7RGC-CDXYJ-FTYH2-Y3VVV-KBYC7 XXXXX-OEM-0011964-38550 索尼 SONY XP PRO SP1<br/>PWBPT-6PGKF-TP6MY-299P4-CPXQG XXXXX-OEM-0011903-00154 联想 LENOVO XP HOME SP1<br/>RCBF6-6KDMK-GD6GR-K6DP3-4C8MT XXXXX-OEM-0011903-00102 戴尔 DELL XP HOME SP1<br/>CXCY9-TTHBT-36J2P-HT3T3-QPMFB XXXXX-OEM-0011903-00100 宏基 ACER XP HOME SP1<br/>DMY26-78CX9-Q89DP-Q8QK8-VF2B8 XXXXX-OEM-0011903-00107 IBM IBM XP HOME SP1<br/>MK48G-CG8VJ-BRVBB-38MQ9-3PMFT XXXXX-OEM-0011903-00106 惠普 HP XP HOME SP1<br/>KG27H-JV9M6-2CXKV-GMP22-HF2BQ XXXXX-OEM-0011903-00101 康柏 COMPAQ XP HOME SP1<br/>JMY6-GMJHY-2VJ79-K67WT-KQHYT XXXXX-OEM-0011903-00166 七喜 HEDY XP HOME SP1<br/>KMHJF-9M82Y-YPFV7-YQHXH-F9JW8 XXXXX-OEM-0011903-00179 清华同方 THTF XP HOME SP1<br/>FK4VC-XP9C3-BD78M-68492-BP9BY XXXXX-OEM-0011903-00296 方正 FONDER XP HOME SP1<br/>XVX72-2WCXQ-48VWH-T66HT-C7R2B XXXXX-OEM-0011903-00108 三星 SAMSUNG XP HOME SP1<br/>WDHPC-6WQPF-W3R3K-J2VF4-JFP8W XXXXX-OEM-0011903-00111 东芝 TOSHIBA XP HOME SP1<br/>XPGYX-J7BF9-4YJVV-7MWK9-WQT3Y XXXXX-OEM-0011903-00160 TCL TCL XP HOME SP1<br/>JY6V8-QV6YB-BD3GX-67DC9-JT7WD XXXXX-OEM-0011903-00137 富士通 FUJITSU XP HOME SP1<br/>- - - - XXXXX-OEM-0011903-001 华硕 ASUS XP HOME SP1<br/>- - - - XXXXX-OEM-0011903-001 索尼 SONY XP HOME SP1<br/>VF4HT-MPWB8-TWV6R-K6QM4-W6JCM XXXXX-OEM-0011903-01808 联想 LENOVO XP PRO SP2<br/>KG7G9-67KHV-4FQKV-4DYXK-BHQTJ XXXXX-OEM-0011903-01811 戴尔 DELL XP PRO SP2<br/>KDD3G-HGVGM-M24P4-6BMMY-9XHF8 XXXXX-OEM-0011903-01807 宏基 ACER XP PRO SP2<br/>TW8WB-MKT89-FRD3V-H6CGJ-6JW83 XXXXX-OEM-0011903-01809 IBM IBM XP PRO SP2<br/>P2BXT-D7Y8P-F6WF2-HYXY9-49TJD XXXXX-OEM-0011903-01801 惠普 HP XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 康柏 COMPAQ XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 七喜 HEDY XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 清华同方 THTF XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 方正 FONDER XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 三星 SAMSUNG XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 东芝 TOSHIBA XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 TCL TCL XP PRO SP2<br/>- - - - XXXXX-OEM-0011903-018 富士通 FUJITSU XP PRO SP2<br/>GRDYP-4FGYT-PVTVM-HDFWC-H88C6 XXXXX-OEM-0011903-01814 华硕 ASUS XP PRO SP2<br/>VWYJM-QRYBJ-MF4XT-X33VX-TC7FM XXXXX-OEM-0011903-01800 索尼 SONY XP PRO SP2<br/>FJXCH-4KYT3-XXJTH-4H848-FYP4D XXXXX-OEM-0011903-01861 长城 GREATWALL XP PRO SP2<br/>MX9CY-JBQF4-8CVBB-BG7DV-3GYBG XXXXX-OEM-0011903-00578 联想 LENOVO XP HOME SP2<br/>PB3BB-PGK84-XBWMD-7BTJD-469FD XXXXX-OEM-0011903-00581 戴尔 DELL XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-00577 宏基 ACER XP HOME SP2<br/>KDTCC-2Q322-Q7PGH-RYV3X-MD7MJ XXXXX-OEM-0011903-00579 IBM IBM XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-00571 惠普 HP XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-005 康柏 COMPAQ XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-005 七喜 HEDY XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-005 清华同方 THTF XP HOME SP2<br/>K72PX-D96QW-RCHB9-3P96F-YQBCY XXXXX-OEM-0011903-00596 方正 FONDER XP HOME<br/>XVWGR-9G3XH-TCM2D-MXQGM-F69DT XXXXX-OEM-0011903-00574 三星 SAMSUNG XP HOME<br/>MMT39-27M26-DFHXJ-MT9GQ-T3KDQ XXXXX-OEM-0011903-00573 东芝 TOSHIBA XP HOME SP2<br/>CR8C9-M7QQG-FGJWT-CV666-4J3XG XXXXX-OEM-0011903-00822 TCL TCL XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-005 富士通 FUJITSU XP HOME SP2<br/>M4YRW-BMBQP-HH2CP-TG37G-Y76RM XXXXX-OEM-0011903-00584 华硕 ASUS XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-005 索尼 SONY XP HOME SP2<br/>WPBTV-FHT4G-7WJJW-388TD-XFHMQ XXXXX-OEM-0011903-00837 夏新 AMOI XP HOME SP2<br/>MJTYD-HFXKV-7M3RR-W69K8-4RRWG XXXXX-OEM-0011903-00586 NEC NEC XP HOME SP2<br/>- - - - XXXXX-OEM-0011903-005 明基 BENQ XP HOME SP<br/>MVWW2Q-22YMY-W4VWC-GTX4Q-47BC6 XXXXX-OEM-0011903-00854 富士通 FUJITSU XP MCE 2005<br/>MRX3F-47B9T-2487J-KWKMF-RPWBY XXXXX-OEM-0064083-83400 企业版 工行 XP VOL SP2<br/>QC986-27D34-6M3TY-JJXP9-TBGMD XXXXX-OEM-0064004-01249 企业版 广州 XP VOL SP2<br/>CM3HY-26VYW-6JRYC-X66GX-JVY2D XXXXX-OEM-0064013-47917 企业版 XP VOL SP2<br/>DP7CM-PD6MC-6BKXT-M8JJ6-RPXGJ XXXXX-OEM-0064013-46451 企业版 XP VOL SP2<br/>F4297-RCWJP-P482C-YY23Y-XH8W3 XXXXX-OEM-0064004-63601 企业版 XP VOL SP2<br/>H7VV-6P3G9-82TWK-QKJJ3-MXR96 XXXXX-OEM-0064013-15326 企业版 XP VOL SP2<br/>HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT XXXXX-OEM-0064022-44918 企业版 XP VOL SP2
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?24</link>
<title><![CDATA[php 小偷类 ]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程技术]]></category>
<pubDate>Sat, 1 Mar 2008 13:26:15 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?24</guid> 
<description>
<![CDATA[ 
	<div class="code">&lt;?php<br/>function Steal($url,&nbsp;&nbsp; $post_data = &quot;&quot;)&#123;<br/>//$header&#91;&#93;&nbsp;&nbsp; =&nbsp;&nbsp; &quot;Accept:&nbsp;&nbsp; text/vnd.wap.wml,*.*&quot;;&nbsp;&nbsp; <br/>$user_agent&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; &quot;Mozilla/4.0&quot;; <br/>$follow_loc&nbsp;&nbsp; =&nbsp;&nbsp; 1; <br/>$cookie_file&nbsp;&nbsp; =&quot;/tmp/cook.txt&quot;; <br/>$ch&nbsp;&nbsp; =&nbsp;&nbsp; @curl_init(); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_URL,&nbsp;&nbsp; $url); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_USERAGENT,&nbsp;&nbsp; $user_agent); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_COOKIEJAR,&nbsp;&nbsp; $cookie_file); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_COOKIEFILE,&nbsp;&nbsp; $cookie_file); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_HEADER,&nbsp;&nbsp; $header); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_RETURNTRANSFER,&nbsp;&nbsp; 1); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_FOLLOWLOCATION,&nbsp;&nbsp; $follow_loc); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_TIMEOUT,&nbsp;&nbsp; 1000); <br/></div><div class="code"><br/>if&nbsp;&nbsp; (trim($post_data)!= &quot;&quot;)&nbsp;&nbsp; &#123; <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_POST,&nbsp;&nbsp; 1); <br/>@curl_setopt($ch,&nbsp;&nbsp; CURLOPT_POSTFIELDS,&nbsp;&nbsp; $post_data); <br/>&#125; <br/><br/>$result&nbsp;&nbsp; =&nbsp;&nbsp; @curl_exec($ch); <br/>@curl_close($ch); <br/>return&nbsp;&nbsp; $result; <br/>&#125;<br/><br/>function DeBug($code)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;&lt;textarea name=&#039;textarea&#039; cols=&#039;130&#039; rows=&#039;20&#039;&gt;&quot;.$code.&quot;&lt;/textarea&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>function noReturn($code)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$code=str_replace(&quot; &quot;, &quot;&quot;, $code);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp; $code;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>function Cut($file,$from,$end)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($from,$file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($end,$message&#91;1&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($message&#91;0&#93; == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message&#91;0&#93; = &quot;&lt;font&nbsp;&nbsp; color= &#039;#ff0000&#039;&gt;无法获取内容&lt;/font&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message&#91;0&#93;;<br/>&#125;<br/><br/>function Cutx($file,$from,$end)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($from,$file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($end,$message&#91;1&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($message&#91;0&#93; == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message&#91;0&#93; = &quot;&lt;font&nbsp;&nbsp; color= &#039;#ff0000&#039;&gt;无法获取内容&lt;/font&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $from.$message&#91;0&#93;.$end;<br/>&#125;<br/><br/>function Filt($file,$from,$end,$new)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($from,$file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$from_n = $message&#91;0&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($end,$message&#91;1&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$end_n = $message&#91;1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($from_n == &quot;&quot; or $end_n == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new = &quot;&lt;font&nbsp;&nbsp; color= &#039;#ff0000&#039;&gt;无法获取内容&lt;/font&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $from_n.$new.$end_n;<br/>&#125;<br/><br/>function Filtx($file,$from,$end,$new)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($from,$file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$from_n = $message&#91;0&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message=explode($end,$message&#91;1&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$end_n = $message&#91;1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($from_n == &quot;&quot; or $end_n == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new = &quot;&lt;font&nbsp;&nbsp; color= &#039;#ff0000&#039;&gt;无法获取内容&lt;/font&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $from_n.$from.$new.$end.$end_n;<br/>&#125;<br/><br/>function Change($file,$old,$new)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file = str_replace($old,$new,$file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $file;<br/>&#125;<br/><br/>//正则替换<br/>function Changez($file,$old,$new)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$old = &quot;/&quot;.$old.&quot;/i&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file = preg_replace($old,$new,$file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $file;<br/>&#125;<br/><br/>//正则提取,效率低下不建议使用!<br/>function Cutz($file,$old)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$old = &quot;/&quot;.$old.&quot;/i&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file = preg_match($old,$file,$regs);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $file = $regs&#91;1&#93; ;<br/>&#125;<br/>?&gt;<br/></div>
]]>
</description>
</item><item>
<link>http://blog.thulu.com/read.php?22</link>
<title><![CDATA[重新启动apache服务器 ]]></title> 
<author>冰糖 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[软件使用]]></category>
<pubDate>Fri, 18 Jan 2008 12:44:44 +0000</pubDate> 
<guid>http://blog.thulu.com/read.php?22</guid> 
<description>
<![CDATA[ 
	LINUX下重新启动apache服务器 <br/>/usr/local/apache/bin/apachectl restart <br/>Tags - <a href="http://blog.thulu.com/tag.php?tag=linuxapache" rel="tag">linuxapache</a>
]]>
</description>
</item>
</channel>
</rss>