<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_海天小阁</title><subtitle type="text">一个生于70年代的IT人，高不成低不就，与君共勉</subtitle><id>http://feed.cnblogs.com/blog/u/17849/rss</id><updated>2012-04-13T00:22:19Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/17849/rss"/><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2012/03/23/2413460.html</id><title type="text">[算法] 已知在平面坐标系内有N个点，求离开给定坐标距离最近的10个点</title><summary type="text">最近在工作中碰到了这个问题：已知在平面坐标系内有N个点，求离开给定坐标距离最近的10个点。团队的第一反应自然是按照两点间距离公式， 遍历N个已知点，然后排序获得前10个最短距离的结果。 只是，我从来不是一个规规矩矩的人。我一直推崇用人类直觉思维来编程，而不要被僵化的程序思想束缚。传统距离公式，计算N个点的距离需要2N次的减法和平方。而事实上， 一个真正的人类，是不会把所有N个点的距离都计算一遍的。大多数点都会被某些快速条件过滤掉的。今天先把问题在这里写下来， 有时间在把优化后的算法补充进来。</summary><published>2012-03-23T04:41:00Z</published><updated>2012-03-23T04:41:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2012/03/23/2413460.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2012/03/23/2413460.html"/><content type="html">&lt;p&gt;最近在工作中碰到了这个问题：已知在平面坐标系内有N个点，求离开给定坐标距离最近的10个点。&lt;/p&gt;&lt;p&gt;团队的第一反应自然是按照两点间距离公式， 遍历N个已知点，然后排序获得前10个最短距离的结果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;只是，我从来不是一个规规矩矩的人。我一直推崇用人类直觉思维来编程，而不要被僵化的程序思想束缚。&lt;/p&gt;&lt;p&gt;传统距离公式，计算N个点的距离需要2N次的减法和平方。&lt;/p&gt;&lt;p&gt;而事实上， 一个真正的人类，是不会把所有N个点的距离都计算一遍的。大多数点都会被某些快速条件过滤掉的。&lt;/p&gt;&lt;p&gt;今天先把问题在这里写下来， 有时间在把优化后的算法补充进来。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px; background-color: #ccffcc;"&gt;&lt;span style="font-size: 14pt;"&gt;最差劲模式&lt;/span&gt;：&lt;/span&gt;&lt;br /&gt;每次遍历已知点数组，逐个计算两点间距离，保留最小值以及索引信息。&lt;/p&gt;&lt;p&gt;时间复杂度 O(n)&lt;/p&gt;&lt;p&gt;缺点：每次查询都要重新遍历数组，效率低下。&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffcc; font-size: 14pt;"&gt;优化模式1：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dic3提出的方式&lt;/p&gt;&lt;p&gt;预处理阶段，遍历所有已知点，得出一个初始化半径，以确保至少能有一个或多个点在半径内。&lt;/p&gt;&lt;p&gt;实际处理阶段：&lt;/p&gt;&lt;p&gt;用初始化半径，判断半径内的已知点。然后根据结果再次扩大或缩小半径。&lt;/p&gt;&lt;p&gt;缺点：严重的问题是，如何知道半径内的点都是谁？其实又要遍历所有点了。&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffcc; font-size: 14pt;"&gt;优化模式2：网格预处理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;预处理阶段，按已知坐标将所有点分配到二维数组内&lt;/p&gt;&lt;p&gt;实际处理阶段：&lt;/p&gt;&lt;p&gt;按目标坐标计算并获取核心下标，获得二维数组内的一个元素&lt;/p&gt;&lt;p&gt;判断这个网格内的所有点的距离并获取结果。&lt;/p&gt;&lt;p&gt;如果目标点在网格边缘，需要进一步增加相邻网格内的数据来判断。&lt;/p&gt;&lt;p&gt;缺点：&lt;/p&gt;&lt;p&gt;1、最差情况下要判断4个网格&lt;/p&gt;&lt;p&gt;2、当网格内元素数量持续增加时，算法效率同样下降明显。&lt;/p&gt;&lt;p&gt;时间复杂度 O(n/网格数量)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/2413460.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2012/03/23/2413460.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2011/06/16/2082302.html</id><title type="text">程序员？你是数学家还是物理学家？</title><summary type="text">数学对应于算法。物理对应于面向对象。算法大师精于从数据里面通过精巧的计算，得到我们所预期的结果。而OO大师则精于构造一个完美的系统，充斥着类、属性、方法、事件。</summary><published>2011-06-16T00:46:00Z</published><updated>2011-06-16T00:46:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2011/06/16/2082302.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2011/06/16/2082302.html"/><content type="html">&lt;p&gt;早晨突然的一个感觉。&lt;/p&gt;&lt;p&gt;在程序员的世界里，存在着数学家和物理学家。&lt;/p&gt;&lt;p&gt;先看看百度百科的相关解释：&lt;/p&gt;&lt;p&gt;数学：&lt;/p&gt;&lt;p&gt;数学是研究数量、结构、变化以及空间模型等概念的一门学科。透过抽象化和逻辑推理的使用，由计数、计算、量度和对物体形状及运动的观察中产生。数学家们拓展这些概念，为了公式化新的猜想以及从合适选定的公理及定义中建立起严谨推导出的真理。&lt;/p&gt;&lt;p&gt;物理：&lt;/p&gt;&lt;p&gt;在物理学的领域中，研究的是宇宙的基本组成要素：物质、能量、空间、时间及它们的相互作用；借由被分析的基本定律与法则来完整了解这个系统。物理在经典时代是由与它极相像的自然哲学的研究所组成的，直到十九世纪物理才从哲学中分离出来成为一门实证科学。&lt;/p&gt;&lt;p&gt;数学对应于算法。物理对应于面向对象。&lt;/p&gt;&lt;p&gt;算法大师精于从数据里面通过精巧的计算，得到我们所预期的结果。&lt;/p&gt;&lt;p&gt;而OO大师则精于构造一个完美的系统，充斥着类、属性、方法、事件。&lt;/p&gt;&lt;p&gt;数学是人类最古老的一门科学了。物理是后辈。同样，在计算机世界里，算法是从这个世界被创造的那天起就存在并且将永远存在下去的。&lt;/p&gt;&lt;p&gt;离开了数学，物理可能就变成了哲学，甚至不能算上一门科学了。同样，离开了算法，面向对象也会失色很多。&lt;/p&gt;&lt;p&gt;之所以发这个博文，以及早上会出现的这个想法。因为一直以来有一个问题：&lt;/p&gt;&lt;p&gt;算法 + 数据结构 = 程序&lt;/p&gt;&lt;p&gt;这个老套的、经典的，你又无法证明他不对的公式，驱使一代又一代的程序员从学习编程的第一天就去努力学习算法。驱使一代又一代的程序员从一开始就认定一定要学通数据结构。&lt;/p&gt;&lt;p&gt;但是世界早已经改变了。&lt;/p&gt;&lt;p&gt;我们已经有面向对象这个东西了。&amp;ldquo;物理时代&amp;rdquo;已经到来了。&lt;/p&gt;&lt;p&gt;很明显，物理学专家的数学能力一定比一般人要强。拥有较强数学能力的物理学家可能会有更大的成就。&lt;/p&gt;&lt;p&gt;但是多数物理学家一定不会是大数学家。毕竟大家术业有专攻的。&lt;/p&gt;&lt;p&gt;同样，一个人同时有较高的算法和OO能力是可能的。但是同时是算法和OO大师是很难的。因为这两者在看待客观世界的时候，眼睛里看到的东西是不同的。&lt;/p&gt;&lt;p&gt;学习编程，不能不学习算法。只是看清楚自己的能力、兴趣和特长。&lt;/p&gt;&lt;p&gt;然后选择自己成为一个数学家，或者物理学家。&lt;/p&gt;&lt;p&gt;最后：一家之言，仅供参考。呵呵。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/2082302.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2011/06/16/2082302.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2011/05/17/2048943.html</id><title type="text">谷歌Chrome OS的五个理由不足以成为Windows杀手</title><summary type="text">博客园的新闻：谷歌Chrome OS将成为Windows杀手的五个理由很多观点不能赞同。因此写一个短文来揭示一下。1. 具有吸引力的套餐服务和价格谷歌Chromebook：用每月28美元租赁费用剑指微软PC电脑升级周期。天啊，每月28美元！一年就是$336. 假设微软每3年有一次客户端Windows版本升级，则Chrome用户3年累计投入了$1008.Walmart今天的Windows7价格如下http://www.walmart.com/search/search-ng.do?search_query=windows+7+&amp;ic=48_0&amp;_refineresult=true</summary><published>2011-05-17T07:32:00Z</published><updated>2011-05-17T07:32:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2011/05/17/2048943.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2011/05/17/2048943.html"/><content type="html">&lt;p&gt;博客园的新闻：&lt;a href="http://news.cnblogs.com/n/101179/"&gt;谷歌Chrome &lt;br /&gt;OS将成为Windows杀手的五个理由&lt;/a&gt;&lt;/p&gt;&lt;p&gt;很多观点不能赞同。&lt;/p&gt;&lt;p&gt;因此写一个短文来揭示一下。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 具有吸引力的套餐服务和价格&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;谷歌Chromebook：用每月28美元租赁费用剑指微软PC电脑升级周期。&lt;/p&gt;&lt;p&gt;天啊，每月28美元！一年就是$336. &lt;/p&gt;&lt;p&gt;假设微软每3年有一次客户端Windows版本升级，则Chrome用户3年累计投入了$1008.&lt;/p&gt;&lt;p&gt;Walmart今天的Windows7价格如下&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.walmart.com/search/search-ng.do?search_query=windows+7+&amp;amp;ic=48_0&amp;amp;_refineresult=true&amp;amp;search_constraint=3944&amp;amp;ref=125875+4294296134" title="http://www.walmart.com/search/search-ng.do?search_query=windows+7+&amp;amp;ic=48_0&amp;amp;_refineresult=true&amp;amp;search_constraint=3944&amp;amp;ref=125875+4294296134"&gt;http://www.walmart.com/search/search-ng.do?search_query=windows+7+&amp;amp;ic=48_0&amp;amp;_refineresult=true&amp;amp;search_constraint=3944&amp;amp;ref=125875+4294296134&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Windows 7 Ultimate Full $279&lt;/p&gt;&lt;p&gt;Windows 7 Ultimate Upgrade&amp;nbsp; $179&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.walmart.com/ip/Microsoft-Windows-7-Home-Premium-3-Users-Family-Pack-Upgrade/12575354" title="http://www.walmart.com/ip/Microsoft-Windows-7-Home-Premium-3-Users-Family-Pack-Upgrade/12575354"&gt;http://www.walmart.com/ip/Microsoft-Windows-7-Home-Premium-3-Users-Family-Pack-Upgrade/12575354&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Windows 7 Home Premium 3 Users Family Pack Upgrade $124.54&lt;/p&gt;&lt;p&gt;所以&lt;/p&gt;&lt;p&gt;1、以平均使用3年计算，Windows价格更低&lt;/p&gt;&lt;p&gt;2、Windows XP 直到今天依然可以使用，因此年均分摊成本Windows更低。&lt;/p&gt;&lt;p&gt;3、Windows用户可以选择不升级&lt;/p&gt;&lt;p&gt;4、Windows的家庭包装更为低价。Chromebook如果装两台是不是要花两倍的价格呢？&lt;/p&gt;&lt;p&gt;Chromebook会在价格上有多大优势自然不用多说了&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2. 简便易用&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Linux操作系统的名声是非常难用。Linux台式电脑，无论是KDE还是GNOME，都需要你重新学习做事的方法，不管你先前使用的是Windows还是Mac &lt;br /&gt;OS X。即使是最新的易于使用的Ubuntu Unity界面，也与其他台式电脑操作系统有很大的不同。 &lt;/p&gt;&lt;p&gt;相对而言，Chrome OS使用起来就简单得多，你只要会用网络浏览器，就会用Chrome &lt;br /&gt;OS。它的界面就是Chrome网络浏览器，你没必要学习任何新的东西。只要你会用电脑，你就会用Chromebook。 &lt;/p&gt;&lt;p&gt;好吧，这个的确没法子多说。不过指出几个错误。&lt;/p&gt;&lt;p&gt;1、苹果的操作系统，也是某个inux的定制版本。没看见谁抱怨过苹果的操作系统难用，难道都是受虐狂？&lt;/p&gt;&lt;p&gt;2、拿一个浏览器的操作手册和一个操作系统的操作手册相比，的确前者会薄很多。&lt;/p&gt;&lt;p&gt;3、Chromebook能进行磁盘碎片整理么？能进行系统启动参数调整么？能实现鼠标左右键换位么？能实现硬盘加密么？能实现系统防火墙设置么？&lt;/p&gt;&lt;p&gt;能&amp;hellip;.?&lt;/p&gt;&lt;p&gt;可能有些能实现，不过等很多东西都实现后，这玩意儿还简便易用么？或者说Chromebook的设计者把系统的很多复杂性彻底和直接用户隔离了？&lt;/p&gt;&lt;p&gt;嗯，这有可能会导致后面第四点的安全问题的，除非设计者能面面俱到。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. 应用程序丰富&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这个很容易理解：&lt;/p&gt;&lt;p&gt;1、凡是能在Windows OS上运行的软件，是否都能迁移到Chromebook？&lt;/p&gt;&lt;p&gt;2、凡是能在ChromeBook上运行的软件，是否都能迁移到Windows OS？&lt;/p&gt;&lt;p&gt;结论就是理论上Windows OS的应用程序更丰富。突然发现原文没有用&amp;ldquo;更丰富&amp;rdquo;，而是&amp;ldquo;丰富&amp;rdquo;？&lt;/p&gt;&lt;p&gt;当然，实际上还要看有没有人来做这个转换，比如Android和苹果的APP理论上应该都能互相迁移，但是实际上还是有点差异。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;4. 安全性更高&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;之所以Windows受恶意软件攻击频率最高，因为装机量最大，也最有攻击价值。&lt;/p&gt;&lt;p&gt;我昨天自己写的一个OS，24小时内没有受到恶意攻击，这点上已经超过WindowsOS了。&lt;/p&gt;&lt;p&gt;ChromeBook说自己不会被攻击？黑暗世界的魔头笑了。&lt;/p&gt;&lt;p&gt;嗯，不联网就不会被攻击。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;5. 谷歌品牌知名度高&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;哦，这个也的确。&lt;/p&gt;&lt;p&gt;不过另一个事实就是谷歌品牌的美誉度逐年下降。&lt;/p&gt;&lt;p&gt;如今的谷歌已经再也不可能成为曾经那个&amp;ldquo;不作恶&amp;rdquo;的谷歌了。&lt;/p&gt;&lt;p&gt;不过貌似文章主题是说谷歌Chrome OS和WindowsOS的比较。所以谷歌OS的品牌知名度还远远不及WindowsOS。&lt;/p&gt;&lt;p&gt;2010年WindowsOS的估值是1100亿美元。&lt;/p&gt;&lt;p&gt;2010年MS - Office的估值是860亿美元。&lt;/p&gt;&lt;p&gt;2010年Google的股票市值大约是2000亿美元.&lt;/p&gt;&lt;p&gt;================================================================================================&lt;/p&gt;&lt;p&gt;写此文不是为了证明WindowsOS的地位永远不会被推翻。&lt;/p&gt;&lt;p&gt;而是为了说明有些事情不能只用脑子来思考（不要自己臆想）。&lt;/p&gt;&lt;p&gt;谷歌OS，至少在目前，是一个价格比WindowsOS高，暴露给客户的可配置项少（不一定是缺点），应用程序不丰富，安全性未知的操作系统。&lt;/p&gt;&lt;p&gt;谷歌的Android能在移动设备上成功，是因为移动设备不需要太多的应用程序和可配置项。&lt;/p&gt;&lt;p&gt;而且，Android已经在为自己复杂的第三方定制版本造成的APP不兼容开始头痛了。国内的吸流量的恶意软件似乎早就遍地开花了。&lt;/p&gt;&lt;p&gt;Windows和Office，微软的两大基石。&lt;/p&gt;&lt;p&gt;至少目前还是强大的，强大到任何挑战本质上都是徒劳的。&lt;/p&gt;&lt;p&gt;至于未来。&lt;/p&gt;&lt;p&gt;自私的说，希望个人有生之年WindowsOS的市场份额不低于60%。&lt;/p&gt;&lt;p&gt;否则，难不成到老了还要另外学一套系&lt;/p&gt;&lt;p&gt;或者，到时候都是类似Chrome OS那样的。开机就用的系统，类似彩电。&lt;/p&gt;&lt;p&gt;希望Chrome OS能带给大家惊喜。&lt;/p&gt;&lt;p&gt;Windows最大的问题，就是比尔盖茨没有实现他当年发布95和XP时候诺言：让老太太也能用PC。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/2048943.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2011/05/17/2048943.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2010/12/27/1916297.html</id><title type="text">螺旋数组算法[下篇]--努力接近需求的本质</title><summary type="text">终于搞完了。不过在周末看到了 flyinghearts 的算法，顿时觉得自己白干了，呵呵。从他那里发现自己下面的算法分析还有改进的地方。好歹留个纪念，第三篇博文如下。我的算法有两个，其实是三个版本。1、根据(x,y)坐标和矩形边长n，直接计算目标值，线性填充数组，非优化代码2、根据(x,y)坐标和矩形边长n，直接计算目标值，线性填充数组，优化代码3、将算法分散到两重循环之间，也就是说丧失了直接计算的能力，换取更高的执行速度。</summary><published>2010-12-27T03:57:00Z</published><updated>2010-12-27T03:57:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/27/1916297.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/27/1916297.html"/><content type="html">&lt;p&gt;终于搞完了。&lt;/p&gt;&lt;p&gt;不过在周末看到了&amp;nbsp;&lt;a href="http://www.cnblogs.com/flyinghearts/"&gt;flyinghearts&lt;/a&gt;&amp;nbsp;的算法，顿时觉得自己白干了，呵呵。&lt;/p&gt;&lt;p&gt;从他那里发现自己下面的算法分析还有改进的地方。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;反正也糗大了，好歹留个纪念，第三篇博文如下。&lt;/p&gt;&lt;p&gt;我的算法有两个，其实是三个版本。&lt;/p&gt;&lt;p&gt;1、根据(x,y)坐标和矩形边长n，直接计算目标值，线性填充数组，非优化代码&lt;/p&gt;&lt;p&gt;2、根据(x,y)坐标和矩形边长n，直接计算目标值，线性填充数组，优化代码&lt;/p&gt;&lt;p&gt;3、将算法分散到两重循环之间，也就是说丧失了直接计算的能力，换取更高的执行速度。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;先欣赏一种算法分析&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;首先我的思路是找到螺旋矩阵的规律，尤其是避免判断特定点在四条边。&lt;/p&gt;&lt;p&gt;结果我发现了一个新的规律(结果也就是死在这个分析上了，离真相就差一点点，结果是个谬误。中心1的位置不稳定，计划改成外旋顺时针再进行分析)&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/Matrix3.PNG" width="234" height="123" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;从内部的1开始，我们可以找到边长为2，3，4，5，6的螺旋矩阵&lt;/p&gt;&lt;p&gt;按照n边长，可以确定1的坐标，以1为第一块，(2,3,4)为第二块，以此类推。&lt;/p&gt;&lt;p&gt;我们可以根据(x,y)，和1的坐标，计算出(x,y)再哪块上。&lt;/p&gt;&lt;p&gt;然后进一步根据这些信息计算出该坐标上的数值&lt;/p&gt;&lt;p&gt;实际代码如下：&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; GenerateMatrixWithBeginingInfo(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; N, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;[,] matrix, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; startAngle, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; isClockwish,&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; isReverse)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (isReverse == &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;true&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;)&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.reverse = -(N * N+1);&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.isClockwith = isClockwish;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.angle = startAngle;&lt;/p&gt;&lt;p&gt;GenerateMatrix(N, matrix);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; GenerateMatrixWithEndingInfo(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; N, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;[,] matrix, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; endAngle, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; isClockwish,&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; isReverse)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (N % 2 != 1)&lt;/p&gt;&lt;p&gt;endAngle = (endAngle + 180) % 360;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.GenerateMatrixWithBeginingInfo(N, matrix, endAngle, isClockwish,isReverse);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; GenerateMatrix(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; N, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;[,] matrix)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&amp;nbsp;Point&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; p;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;//Get point of origin&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;originPoint = &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Point&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; { X = N / 2, Y = (N - 1) / 2 };&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;for&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; x = 0; x &amp;lt; N; x++)&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; for&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; y = 0; y &amp;lt; N; y++)&lt;/p&gt;&lt;p&gt;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #339966"&gt;&lt;strong&gt;//坐标转换&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; p&amp;nbsp;= processPoint(N, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Point&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; { X=x,Y=y});&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; matrix[x, y] = GetMatrixValue(N, p);&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; GetMatrixValue(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; N, &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Point&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; p)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; blockNumber;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; startNumber;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; odd;&lt;/p&gt;&lt;p&gt;&amp;nbsp;odd = N % 2;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;//Get block number&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;//1. get block number&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;blockNumber = &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Max(&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Abs(p.X - originPoint.X), &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Abs(p.Y - originPoint.Y)) * 2 + &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Convert&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.ToInt32(p.X + odd &amp;gt; p.Y);&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;//2. get startNumber&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;startNumber = blockNumber - blockNumber % 2;&lt;/p&gt;&lt;p&gt;&amp;nbsp;startNumber *= startNumber;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;//3. return value&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;return&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Abs((&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;)(startNumber + &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Pow(-1,(blockNumber+1))*(p.X + p.Y-2*((N-blockNumber)/2)))+odd+reverse); &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Point&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; processPoint(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; N,&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Point&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; p)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; tmp;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (isClockwith == &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;true&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;switch&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.angle)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 0:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.X = N - 1 - p.X; &lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 90:&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (p.X + p.Y + 1 != N)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = p.X;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.X = N - 1 - p.Y;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Y = N - 1 - tmp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 180:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Y = N - 1 - p.Y;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 270:&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (p.X != p.Y)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = p.X;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.X = p.Y;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Y = tmp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; switch&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;(angle)&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 0:&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 90:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = p.X;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.X = p.Y;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Y = tmp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Y = N-1 - p.Y;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 180:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Y = N-1 - p.Y;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.X = N-1 - p.X;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; case&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; 270:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = p.X;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.X = p.Y;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Y = tmp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.X = N-1 - p.X;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; p;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;之所以要坐标转换，因为我默认是把偶数的块放在右上角，这样一来，奇数和偶数的情况下，最后结束的位置是不同的。&lt;/p&gt;&lt;p&gt;例如36在左上角，而25在右下角。&lt;/p&gt;&lt;p&gt;而一般螺旋矩阵的题目都是要求结束点是固定在一个地方的。&lt;/p&gt;&lt;p&gt;因此，我在实际数值计算之前先进行一次坐标转换。&lt;/p&gt;&lt;p&gt;这里这个坐标转换函数没有优化过，是最丑的一个了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt"&gt;执行效率太恐怖了&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不提了，太慢了&lt;/p&gt;&lt;p&gt;对于边长是1000的数组，我的代码是0.17~0.22秒，对比的一个模拟算法的代码只要0.008~0.009秒.&lt;/p&gt;&lt;p&gt;所以做了点优化（扔掉框架数学方法，采用位运算，减少函数调用...）&lt;/p&gt;&lt;p&gt;把代码的功能限定到只考虑从左上角外圈1开始到里面顺时针绕行。毕竟对比代码也只能干这个。要公平么&lt;/p&gt;&lt;p&gt;速度优化后的代码（不建议平时写这种可读性恐怖的代码，俺是被逼无奈，否则俺的乌龟算法没人要的。）&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;public void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; GenerateMatrix(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; N, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;[,] matrix)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; reverse, angle;&lt;/p&gt;&lt;p&gt;reverse = -(N * N + 1);&lt;/p&gt;&lt;p&gt;isClockwith = &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;false&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (N % 2 == 1)&lt;/p&gt;&lt;p&gt;angle = 180;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;angle = 0;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; blockNumber; ;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; tmp;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; odd;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; value;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; blockX, blockY;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; x = 0, y = 0;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; n1=N-1;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;p&gt;ox = N / 2;&lt;/p&gt;&lt;p&gt;oy = (N - 1) / 2;&lt;/p&gt;&lt;p&gt;odd = N &amp;amp; 1;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; x1, y1;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;for&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x1 = 0; x1 &amp;lt; N; x1++)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (angle == 0)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;x = x1;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;x = n1 - x1;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;blockX = x - ox;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x &amp;lt; ox)&lt;/p&gt;&lt;p&gt;blockX = -blockX;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;for&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (y1 = 0; y1 &amp;lt; N; y1++)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (angle == 0)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;y = y1;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;y = n1 - y1;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;blockY = y - oy;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (blockY &amp;lt; 0)&lt;/p&gt;&lt;p&gt;blockY = -blockY;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (blockX &amp;gt; blockY)&lt;/p&gt;&lt;p&gt;blockNumber = blockX&amp;lt;&amp;lt;1;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;blockNumber = blockY&amp;lt;&amp;lt;1; &lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x &amp;gt; y || odd == 1 &amp;amp;&amp;amp; x == y)&lt;/p&gt;&lt;p&gt;blockNumber++;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (blockNumber != 1)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;value=(blockNumber &amp;amp; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.MaxValue - 1)) * (blockNumber &amp;amp; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.MaxValue - 1));&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; ((blockNumber &amp;amp;1) == 1)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;value += x + y - ((N - blockNumber) &amp;amp; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.MaxValue - 1));&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;value -= x + y - ((N - blockNumber) &amp;amp; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.MaxValue - 1));&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;value += odd;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;value = 1;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (reverse == 0)&lt;/p&gt;&lt;p&gt;matrix[x1, y1] = value;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/p&gt;&lt;p&gt;matrix[x1, y1] = -(value + reverse);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;再测试结果如下：&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/Matrix5.PNG" width="477" height="373" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;能看出一点点端倪，我的代码耗时随数组尺寸变化增长略慢一点&lt;/p&gt;&lt;p&gt;继续增加边长&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/Matrix4.PNG" width="477" height="374" /&gt;&lt;/p&gt;&lt;p&gt;在边长达到2500以后，我的算法在速度上开始胜出。也就是说，虽然多了很多数学计算和逻辑判断，但是整体的执行速度反而快。&lt;/p&gt;&lt;p&gt;常识告诉我们，执行代码行越多越慢，因此这里比较靠谱的解释就是因为我的算法避免了对目标数组的非线性访问，从而在大数据量的时候开始拥有速度优势。&lt;/p&gt;&lt;p&gt;另外，直接模拟算法在边长3500以后出现了明显的不稳定，尤其是在8000这个位置（测了它好几遍，18720是一个极小值，平均值会更大）。而我的算法依然维持近似线性的增长。&lt;/p&gt;&lt;p&gt;具体原因没有深入调查，我认为是和老赵提到过的CPU缓存命中有关。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt"&gt;还能更快么？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;最后，为了只求极限速度，同时也是在优化过程中发现有些计算步骤其实是可以分散到Y循环外部去的。&lt;/p&gt;&lt;p&gt;因此暂时先放弃用坐标和边长直接计算数值，转而写一个能顺序访问数组，且仅支持一个螺旋格式的最快速解。&lt;/p&gt;&lt;p&gt;其实这个算法早写了，&lt;a id="ctl02_TitleUrl" href="http://www.cnblogs.com/Chinese-xu/archive/2010/03/14/1685741.html"&gt;&lt;font color="#000080"&gt;世界独创的螺旋数组低于n(o^2)的生成算法&lt;/font&gt;&lt;/a&gt;&amp;nbsp;2010年3月14日发布&lt;/p&gt;&lt;p&gt;不过当时没同时发布算法代码&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;现在来欣赏算法分析&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;先看图&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Chinese-xu/WindowsLiveWriter/no2_12E17/image_2.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Chinese-xu/WindowsLiveWriter/no2_12E17/image_thumb.png" width="644" height="480" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;任何一行，都有3个部分组成&lt;/p&gt;&lt;p&gt;左边橙色的跳增部分，中间的递增递减部分，右边的跳减部分&lt;/p&gt;&lt;p&gt;第一行和最后一行特殊，没有左右部分，奇数边长的中心块归给上半边的递增部分。&lt;/p&gt;&lt;p&gt;每行的处理流程&lt;/p&gt;&lt;p&gt;0、行从0开始循环&lt;/p&gt;&lt;p&gt;1、计算必要参数&lt;/p&gt;&lt;p&gt;2、列从0开始循环&lt;/p&gt;&lt;p&gt;4、当前y坐标是否到达递增块起始位置，如是，转6&lt;/p&gt;&lt;p&gt;5、当前位置值等于本行跳增起始值加跳增增加值，转9&lt;/p&gt;&lt;p&gt;6、当前y坐标是否到达本行跳减起始位置，如是，转8&lt;/p&gt;&lt;p&gt;7、当前位置值等于本行跳增结束值加坐标计算偏移，转9&lt;/p&gt;&lt;p&gt;8、当前位置值等于本行跳减起始值加跳减增加值，转9&lt;/p&gt;&lt;p&gt;9、一行是否结束，是转0，否转2&lt;/p&gt;&lt;p&gt;10、所有结束&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt; &lt;/p&gt;&lt;p&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; GenerateMatrix(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; n, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;[,] Matrix)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; odd = n &amp;amp; 1;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; point1, point2; &lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;//跳增结束点，递增结束点&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; base1 = 0, base2 = 0, base3 = 0;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; magic;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; n4;&lt;/p&gt;&lt;p&gt;&amp;nbsp; n4 = n * 4;&lt;/p&gt;&lt;p&gt;&amp;nbsp; magic = 4 * n - 7;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp; //中间点x坐标&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; halfx = (n + 1) / 2;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp; //填充&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;for&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; x = 0; x &amp;lt; n;x++)&lt;/p&gt;&lt;p&gt;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; //计算结束点&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x &amp;lt; halfx)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; point1 = x; &lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;//跳增结束点&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;point2 = n - x; //跳减开始点&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;//下半区&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; point1 = n - 1- x;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; point2 = x;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; //跳增基数&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x == 0)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base1 = 0;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x == n - 1)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base2 = 3 * n - 1;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; else&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base1 = n4 - 3 - x;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x &amp;lt; halfx)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base2 = base1 + (n4 - 3 - (point1 &amp;lt;&amp;lt; 2)) * (point1 - 1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; else&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base2 = base1 + (n4 - 7 - (point1 &amp;lt;&amp;lt; 2)) * point1 + 1;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp; //跳减基数&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;base3 = n + x;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; for&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; y = 0; y &amp;lt; n; y++)&lt;/p&gt;&lt;p&gt;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp; //跳增段&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (y &amp;lt; point1)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; //x基础数-x行控制+y基础数+y列控制&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix[x, y] = base1+(magic-(y&amp;lt;&amp;lt;2))*y;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; //递增段&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (y&amp;lt;point2)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (x &amp;lt; halfx)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix[x, y] = base2+ y-x+1;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix[x, y] = base2 +point1-y-1;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp; //跳减段&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;nbsp; else&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix[x, y] = base3+ (1+(y&amp;lt;&amp;lt;2)) * (n-1-y);&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;程序还是有细微的地方可以进一步优化速度。&lt;/p&gt;&lt;p&gt;不过目前的性能已经很明显了。&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;比较效果&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/Matrix6.PNG" width="480" height="376" /&gt;&lt;/p&gt;&lt;p&gt;呵呵，从边长600开始就超越了&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/Matrix7.PNG" width="942" height="607" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt"&gt;一个关于算法效率的思考&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们一直在学算法复杂度：时间复杂度、空间复杂度。&lt;/p&gt;&lt;p&gt;如果仅从一般的估计而言，上面所有的算法都是O(n^2)的。&lt;/p&gt;&lt;p&gt;当边长增加一倍，算法需要的时间就会增加4倍。&lt;/p&gt;&lt;p&gt;但是很明显这种估计只是针对一个算法自身和自身进行比较，两个算法之间，即使大家都是O(n^2)，但是实际上还是有速度快慢之分的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果未来还能在性能上提高10%以上，我会再次发文的&lt;/p&gt;&lt;p&gt;呵呵。&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/1916297.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/27/1916297.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912829.html</id><title type="text">螺旋数组算法[中篇]--常规数学分析</title><summary type="text">希望科班出身的兄弟帮忙推演一下，最好能获得充分的数学论证。鄙人当年高数是勉强过关的，如今心里那个悔啊，呜呜....） Chinese_xu猜想，自变量在整数范围内，任何二次函数f(x)=ax^2+bx+c 的值形成的数列，计算其前后数据项得到的新数列为等差数列。 从小到大，到学计算机，老鸟们一直教育新手：数学是很重要的不过没栽过跟头不过有刻骨的记忆。没见过实例不会有深刻的印象。没学过、没学好，不丢脸，看不起数学，丢脸。虽然通过摸索一样可以独创微积分原理，但是有巨人的肩膀不去靠，实在是浪费。各位和我一样数学基础不怎么样的同仁请每天少泡半小时视频网站，少半小时魔兽，几年后大学数学还是能补得上来的。</summary><published>2010-12-21T08:20:00Z</published><updated>2010-12-21T08:20:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912829.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912829.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;从农夫三拳的分析开始&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在农夫三拳的博文里，我们可以看见一个神奇的公式&lt;/p&gt;&lt;p&gt;f(n) = 4*n^2 - 2*n + 1 &lt;p&gt;当我们把起点1放到螺旋中心后，从内圈开始作为第一圈，如下图，3，13，31，57&amp;#8230; 形成了一个符合上述规律的数列。 &lt;p&gt;有兴趣的园友可以进一步利用相同的联立方程求解更多有趣的公式 &lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/admin/file:///C:/Users/v-wix/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles279F69A/image3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/Matrix2.PNG" width="381" height="246" /&gt;&lt;/a&gt; &lt;p&gt;例如我们选取1，7，21，43，73，111&amp;#8230; &lt;p&gt;设f(x)=an^2+bn+c &lt;p&gt;得 &lt;p&gt;a+b+c=1 &lt;p&gt;4a+2b+c=7 &lt;p&gt;9a+3b+c=21 &lt;p&gt;解得a,b,c=4,-2,3 &lt;p&gt;x=4*n^2-2*n+3， 经检验，能完美计算这个数列。 &lt;p&gt;&lt;span style="font-size: 14pt"&gt;&lt;strong&gt;资料：常规数列分析 &lt;/strong&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;等差数列 &lt;/u&gt;&lt;/strong&gt;&lt;p&gt;1，2，3，4，5，6，....，n，n+1 &lt;p&gt;特点：前后项差值相等，可以简单用循环变量获得。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;u&gt;反向等差数列&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;n+1,n,n-1,n-2, ..., 6,5,4,3,2,1 &lt;p&gt;如果发现反向等差数列，那么用两个逆向等差数列之和去减其中一个就能得到另一个 &lt;p&gt;例如 数列A=1，2，3，4，5，6&amp;nbsp; 数列B=6，5，4，3，2，1 &lt;p&gt;则数列A=7-数列B &lt;p&gt;具体到我们这个螺旋数组，其实只要用N平方去减获得的值，就能轻松实现起点1在螺旋中心还是外围。也就是说，内旋或外旋算法本质是一样的。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;u&gt;等比数列 &lt;/u&gt;&lt;/strong&gt;&lt;p&gt;1，2，4，8，16....n,2*n,4*n... &lt;p&gt;特点：前后项比例关系一定 &lt;p&gt;1 2^0 &lt;p&gt;2 2^1 &lt;p&gt;4 2^2 &lt;p&gt;8 2^3 &lt;p&gt;观察2的指数，又变回到等差数列了 &lt;p&gt;另外，简单倍数好处理，有时候需要变通 &lt;p&gt;1，1.5, 2.25, 3.375, 5.0625, 7.59375.... &lt;p&gt;呵呵，前后项是1：1.5 &lt;p&gt;其实就是1*1.5^n n=1,2,3,4,5.... &lt;p&gt;&amp;nbsp; &lt;p&gt;二次数列 &lt;p&gt;农夫三拳就是发现了二次数列的秘密，那么有什么办法能发现某个数列是二次数列呢？我也不是很清楚，不过有一个模糊的感觉 &lt;p&gt;如有数列A，求该数列的前后项差，形成数列B &lt;p&gt;如果数列B是一个等差数列，则数列A很有可能就是二次数列 &lt;p&gt;&amp;nbsp; &lt;p&gt;例如 &lt;p&gt;1，3，13，31，57，91... &lt;p&gt;计算前后差，获得数列 &lt;p&gt;2，10，18，26，34... &lt;p&gt;明显看出该数列是公差为8的等差数列 &lt;p&gt;（希望科班出身的兄弟帮忙推演一下，最好能获得充分的数学论证。鄙人当年高数是勉强过关的，如今心里那个悔啊，呜呜....） &lt;p&gt;&lt;span style="background-color: #ff9900"&gt;Chinese_xu猜想&lt;/span&gt;，自变量在整数范围内，任何二次函数f(x)=ax^2+bx+c 的值形成的数列，计算其前后数据项得到的新数列为等差数列。 &lt;p&gt;&amp;nbsp; &lt;p&gt;如果这个猜想为真，那么农夫三拳就可以不要凭直觉去发现二次函数公式了。大家都能有趁手的分析方法了。 &lt;p&gt;在此先谢过各位。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;心得：数学是很重要的&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;从小到大，到学计算机，老鸟们一直教育新手：数学是很重要的&lt;/p&gt;&lt;p&gt;不过没栽过跟头不过有刻骨的记忆。&lt;/p&gt;&lt;p&gt;没见过实例不会有深刻的印象。&lt;/p&gt;&lt;p&gt;没学过、没学好，不丢脸，看不起数学，丢脸。&lt;/p&gt;&lt;p&gt;虽然通过摸索一样可以独创微积分原理，但是有巨人的肩膀不去靠，实在是浪费。&lt;/p&gt;&lt;p&gt;各位和我一样数学基础不怎么样的同仁请每天少泡半小时视频网站，少半小时魔兽，几年后大学数学还是能补得上来的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;我以前的另一个分析&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;说老半天人家的东西，终于开始说说我自己的货色。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;设计思想&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;由于直接模拟算法的方式是先有1，2，3，4...的数列，然后根据数值计算出对应的X，Y坐标，进行赋值。这导致了对目标数组的访问是非线性的，在数组尺寸较大时会有性能问题。&lt;/p&gt;&lt;p&gt;再说，我有时候会用极端方式去重构代码，No if，No loop。&lt;/p&gt;&lt;p&gt;不逼自己改变，人都是很懒的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;主体思路和农夫三拳是一样的，用X，Y坐标值，努力确定一个参考点的值，然后根据坐标偏移和螺旋数组规律计算并直接获得对应X，Y坐标处的数据值。&lt;/p&gt;&lt;p&gt;这么一来，我们可以按传统方式遍历目标数组，并逐一赋值。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;约定术语：&lt;/strong&gt; &lt;p&gt;以边长分别为10和11的螺旋矩阵为例，约定一些基本术语用于后续讨论。 &lt;p&gt;&lt;strong&gt;圈数&lt;/strong&gt; &lt;p&gt;一个矩阵从外到内可以分成很多圈，约定从1开始，依次从内到外编号。 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/20101219211738495.png"&gt;&lt;img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/201012192117409741.png" width="701" height="181" /&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;0起点值&lt;/strong&gt; &lt;p&gt;第一圈是从1开始，不过为了讨论方便约定起点之前的一个值为0起点值。例如，边长为10的螺旋矩阵，第一圈的0起点值是96，第二圈的0起点值是84。而边长为11的第一圈的0起点值是120，而第二圈的0起点值是112。 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/201012192117417133.png"&gt;&lt;img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/201012192117434983.png" width="702" height="173" /&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;基础算法模块&lt;/strong&gt; &lt;p&gt;所谓基础算法模块就是在完成整体任务过程中要用到的一些可以分离的步骤。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;u&gt;按螺旋矩阵边长N，以及X、Y坐标确定圈数&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/201012192117489471.png"&gt;&lt;img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/201012192117503210.png" width="380" height="205" /&gt;&lt;/a&gt; &lt;p&gt;如图，当螺旋矩阵边长N=11的时候。行列的对称坐标位置是（5，5） &lt;p&gt;X=0，10，是第六圈 &lt;p&gt;X=1，9，可能是第五圈 &lt;p&gt;X=2，8，可能是第四圈 &lt;p&gt;X=3，7，可能是第三圈 &lt;p&gt;X=4，6，可能是第二圈 &lt;p&gt;X=5，可能是第一圈 &lt;p&gt;然后考虑偶数边长情况 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/201012192117509797.png"&gt;&lt;img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/201012192117523535.png" width="361" height="212" /&gt;&lt;/a&gt; &lt;p&gt;X=0，9，都是第五圈 &lt;p&gt;X=1，8，可能是第四圈 &lt;p&gt;X=2，7，可能是第三圈 &lt;p&gt;X=3，6，可能是第二圈 &lt;p&gt;X=4，5，可能是第一圈 &lt;p&gt;由此，综合判断，抽象后得到算法如下 &lt;p&gt;按给定(X,Y)，给定边长记作N &lt;p&gt;圈数I=ABS((N-1)/2.0-X)+(N%2+1)*0.5 &lt;p&gt;圈数II=ABS((N-1)/2.0-Y)+(N%2+1)*0.5 &lt;p&gt;两个结果中较大的一个是所求圈数 &lt;p&gt;&amp;nbsp; &lt;p&gt;进一步可以得到指定圈数对应的最大和最小坐标值 &lt;p&gt;坐标数小=(N-1)/2.0-圈数+(N%2+1)*0.5) &lt;p&gt;坐标数大=(N-1)/2.0+圈数-(N%2+1)*0.5) &lt;p&gt;&amp;nbsp;&lt;p&gt;上面这些公式都是奇数和偶数数组通用的，里面使用了模运算以达到这个效果。&lt;p&gt;&amp;nbsp;&lt;p&gt;&lt;strong&gt;&lt;u&gt;已知边长，求指定圈数的0起点值&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;这个很好解释，其实就是减掉中间的一个平方数就可以了。 &lt;p&gt;已知边长N，求指定圈数R的0起点值 &lt;p&gt;0起点值=N*N-(2R-N%2)*(2R-N%2) &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;最后整合&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;已知边长、圈数和坐标，求实际数值&lt;/p&gt;&lt;p&gt;1。按坐标秋圈数&lt;/p&gt;&lt;p&gt;2。计算起点值&lt;/p&gt;&lt;p&gt;3。计算本圈的最大最小坐标&lt;/p&gt;&lt;p&gt;4。根据给定坐标值和最大最小坐标，判断在哪个边上&lt;/p&gt;&lt;p&gt;5。计算最终值&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;实际代码&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; GetMatrixValue(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; N, &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Point&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; p)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; value=0;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; circleNumber,circleNumberX,circleNumberY;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; zeroStart;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; min, max;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;//Get circle number &lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;circleNumberX =(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;) (&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Abs((N - 1) / 2.0 - p.X) + (N % 2 + 1) * 0.5);&lt;/p&gt;&lt;p&gt;circleNumberY = (&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;)(&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Abs((N - 1) / 2.0 - p.Y) + (N % 2 + 1) * 0.5);&lt;/p&gt;&lt;p&gt;circleNumber = &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;Math&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;.Max(circleNumberX, circleNumberY);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;//Get zero start number&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;zeroStart = N * N - (2 * circleNumber - N % 2) * (2 * circleNumber - N % 2);&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;//Get min X and min Y&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;min = (N - 1) / 2 - circleNumber + 1;&lt;/p&gt;&lt;p&gt;max = min + circleNumber * 2 - N % 2-1;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;//Get line number&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (p.X &amp;lt; max &amp;amp;&amp;amp; p.Y == min) { value = zeroStart + p.X - min+1; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (p.X == max &amp;amp;&amp;amp; p.Y &amp;lt; max) { value = zeroStart + circleNumber * 2 - N % 2 + p.Y - min; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (p.X &amp;lt;= max &amp;amp;&amp;amp; p.Y == max) { value = zeroStart + 2 * (circleNumber * 2 - N % 2) - 1 + max - p.X; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; (p.X == min &amp;amp;&amp;amp; p.Y &amp;gt; min) { value = zeroStart + 3 * (circleNumber * 2 - N % 2) - 2 + max - p.Y; }&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; value;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt"&gt;点评&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;优点&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;实现了按输入的X，Y坐标计算得到对应值，对目标数组可以进行简单的循环即可。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt"&gt;&lt;strong&gt;缺点&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;说实话，看着最后那4个IF我还是不爽。极限追求，No IF，No Loop。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt"&gt;感悟，以及对面试官的肺腑之言&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;什么是算法？排序？查找？树遍历？图路径搜索？&lt;/p&gt;&lt;p&gt;什么是设计模式？世界上只有23种设计模式？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们都学过不少东西，学校考试的时候，必须按照标准答案往空格上填，往答题卡上描！&lt;/p&gt;&lt;p&gt;可是，世界上有更多东西是没有标准答案的。99.99%的程序设计题，都可以有多种答案，哪怕这个题有多简单。&lt;/p&gt;&lt;p&gt;不同的解决方案，对应不同的思路，不同的思考侧重点。&lt;/p&gt;&lt;p&gt;如果只是招一个码工，那么我多言了。&lt;/p&gt;&lt;p&gt;想招一个程序员，让他做笔试题也是可以的，也是应该的。&lt;/p&gt;&lt;p&gt;不过，评价标准不应该是他写出来的是不是和面试官自己写的(甚至是抄的)答案一致。而是面对问题的解决思路、应变、细节，乃至对自己代码的阐述。&lt;/p&gt;&lt;p&gt;为什么很多HR说难招人？&lt;/p&gt;&lt;p&gt;我感觉可能是很多HR认为&amp;#8220;常识&amp;#8221;的试题，却是多数埋头工作的人不一定能立刻完美回答得上来。尤其是编程笔试题。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;螺旋数组终极算法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好了，马上就要公布我的终极算法了，其实核心已经写好了，计划明天将矩阵转换的部分都搞定后再发，估计在12/23。&lt;/p&gt;&lt;p&gt;No If，No Loop&lt;/p&gt;&lt;p&gt;据路边社消息：完成如上的&lt;font size="2"&gt;GetMatrixValue&lt;/font&gt;，函数内可执行代码只有5行，当然，硬要嵌成一行也是可以的，而上面的函数，里面的可执行代码要嵌成一行就太勉强了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt"&gt;导读：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a id="ctl02_TitleUrl" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912542.html"&gt;螺旋数组算法[上篇]--直接模拟算法&lt;/a&gt; &lt;/p&gt;&lt;p&gt;螺旋数组算法[中篇]--常规数学分析&lt;/p&gt;&lt;p&gt;螺旋数组算法[下篇]--努力接近需求的本质 预计12/23日发布&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/1912829.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912829.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912542.html</id><title type="text">螺旋数组算法[上篇]--直接模拟算法</title><summary type="text">本人之前曾在园子里承诺过要发布一个能直接按坐标计算对应值的螺旋矩阵算法，结果迟迟没有成文。并且本人有一个解法至今在网上没有看见有相同或类似的解。因此发布一下，为广大算法爱好者做贡献。前两篇是算法分析，最实际算法在第三篇发布。</summary><published>2010-12-21T04:57:00Z</published><updated>2010-12-21T04:57:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912542.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912542.html"/><content type="html">&lt;font size="3" face="Times New Roman"&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;引子：&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;螺旋矩阵是一个比较经典的算法练习题。多数场景下要求练习者编写程序按螺旋方式填充一个边长为N (N&amp;gt;0) 的二维整形数组。如图&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/Chinese-xu/201012/20101219211738495.png" /&gt;&lt;/p&gt;&lt;p&gt;另外，还有的是将1至于螺旋中心，或者逆时针方向演进的。之所以今天发文讨论这个螺旋数组，主要有以下几点：&lt;/p&gt;&lt;p&gt;1、螺旋数组是一个经典习题&lt;/p&gt;&lt;p&gt;2、很多初级程序员至今没有找到理想的解。&lt;/p&gt;&lt;p&gt;由于缺乏正确的程序设计&amp;#8220;世界观&amp;#8221;，很多初级程序员无法独立探寻比单纯模拟更为巧妙地解，本系列也是为了总结一些常规的分析方法。&lt;/p&gt;&lt;p&gt;3、履行对园友的承诺&lt;/p&gt;&lt;p&gt;本人之前曾在园子里承诺过要发布一个能直接按坐标计算对应值的螺旋矩阵算法，结果迟迟没有成文。并且本人有一个解法至今在网上没有看见有相同或类似的解。因此发布一下，为广大算法爱好者做贡献。&lt;/p&gt;&lt;p&gt;4、为广大被面试的同学出口恶气&lt;/p&gt;&lt;p&gt;用螺旋数组做面试题，我听说过很多次。是不是在1小时内写不出来就是水平差呢？我感觉未必，我会用努力证明所有现有的算法都是有问题的，不优雅的。当你手握&amp;#8220;标准&amp;#8221;答案的时候，批评对方能力不足是太轻松的事情了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;场景简介&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;大多数的题目是这样的&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/admin/file:///C:/Users/v-wix/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1F48B86/image4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/Matrix1.PNG" width="402" height="215" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;常规思路&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;是人都知道这个螺旋矩阵里面是有规律的，但是这规律却也不是像打印星号直角三角形那么容易发现。&lt;/p&gt;&lt;p&gt;因此多数程序员都是采用&amp;#8220;&lt;font style="background-color: #ffc000"&gt;直接模拟算法&lt;/font&gt;&amp;#8221;。&lt;/p&gt;&lt;p&gt;所谓直接模拟算法，就是很直白得把问题中提出的需求直接用代码方式模拟完成。&lt;/p&gt;&lt;p&gt;其实在多如牛毛的中小型项目中，用这种思路去实现客户需求的做法不说100%吧，95%是一定的。这是一个问题。&lt;/p&gt;&lt;p&gt;回到我们的这个需求，自然就是用一个大循环产生1到N平方的所有整数，然后在循环体内精确地判断矩形的四个边界，并调整实际的X，Y坐标，然后对目标数组的对应位置进行赋值&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;参考代码&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;以下代码收集自网络, 没有验证过&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.cppblog.com/issayandfaye/archive/2009/11/15/100976.html" href="http://www.cppblog.com/issayandfaye/archive/2009/11/15/100976.html"&gt;&lt;font color="#669966"&gt;http://www.cppblog.com/issayandfaye/archive/2009/11/15/100976.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#669966"&gt;&lt;img id="Code_Closed_Image_796597" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_796597').style.display='none'; document.getElementById('Code_Open_Image_796597').style.display='inline'; document.getElementById('Code_Open_Text_796597').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"&gt;&lt;img style="display: none" id="Code_Open_Image_796597" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_796597').style.display='none'; getElementById('Code_Closed_Image_796597').style.display='inline'; getElementById('Code_Closed_Text_796597').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"&gt;&lt;span id="Code_Closed_Text_796597" class="cnblogs_code_Collapse"&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="display: none" id="Code_Open_Text_796597"&gt;#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include&amp;lt;string.h&amp;gt;&lt;br /&gt;#define MAX_SIZE 100&lt;br /&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&amp;nbsp; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp; intx[]= {0,1,0,-1};&lt;br /&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&amp;nbsp; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp; inty[]= {1,0,-1,0};&lt;br /&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp; main() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp; dir,i,j,n,data,x,y,nextx,nexty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp; arr[MAX_SIZE][MAX_SIZE];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000"&gt;/**/&lt;/span&gt;&lt;span style="color: #008000"&gt;/*Read size*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;printf&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;please input the size\n&lt;/span&gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;scanf&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;%d&lt;/span&gt;",&amp;amp;n);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000"&gt;/**/&lt;/span&gt;&lt;span style="color: #008000"&gt;/*Init*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; x= y= 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; dir= 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; memset(arr,0,&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt;(arr));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000"&gt;/**/&lt;/span&gt;&lt;span style="color: #008000"&gt;/*fill*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(data=1; data&amp;lt;=n*n; data++)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arr[x][y]= data;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nextx= x+intx[dir];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nexty= y+inty[dir];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(arr[nextx][nexty] || nextx&amp;gt;=n || nexty&amp;gt;=n || nextx&amp;lt;0 || nexty&amp;lt;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dir++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(dir==4)dir=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x+= intx[dir];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y+= inty[dir];&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(i=0; i&amp;lt;n; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(j=0; j&amp;lt;n; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;printf&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;%d\t&lt;/span&gt;",arr[i][j]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;printf&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;\n&lt;/span&gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.cnblogs.com/drizzlecrj/archive/2007/04/10/706784.html" href="http://www.cnblogs.com/drizzlecrj/archive/2007/04/10/706784.html"&gt;&lt;font color="#669966"&gt;http://www.cnblogs.com/drizzlecrj/archive/2007/04/10/706784.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#669966"&gt;&lt;/font&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;font color="#669966"&gt;&lt;img id="Code_Closed_Image_926809" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_926809').style.display='none'; document.getElementById('Code_Open_Image_926809').style.display='inline'; document.getElementById('Code_Open_Text_926809').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"&gt;&lt;img style="display: none" id="Code_Open_Image_926809" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_926809').style.display='none'; getElementById('Code_Closed_Image_926809').style.display='inline'; getElementById('Code_Closed_Text_926809').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"&gt;&lt;span id="Code_Closed_Text_926809" class="cnblogs_code_Collapse"&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="display: none" id="Code_Open_Text_926809"&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Simulate(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; n)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; x, y;&lt;br/&gt;    x = y = (n - 1) / 2; &lt;span style="color: #008000"&gt;//1的位置&lt;/span&gt;&lt;br/&gt;    data[x][y] = 1;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; len = 1;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; count = 0;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; num = 2;&lt;br/&gt;    DIRECTION dir = RIGHT;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(num  &amp;lt;= n * n)&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; len; i++)&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;(dir)&lt;br/&gt;            {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; LEFT:&lt;br/&gt;                --y;    &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; RIGHT:&lt;br/&gt;                ++y;     &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; UP:&lt;br/&gt;                --x;    &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; DOWN:&lt;br/&gt;                ++x;    &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;default&lt;/span&gt;:    &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br/&gt;            }&lt;br/&gt;            data[x][y] = num++;&lt;br/&gt;        }&lt;br/&gt;        count++;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(count == 2)&lt;br/&gt;        {&lt;br/&gt;            count = 0;&lt;br/&gt;            len++;    &lt;br/&gt;        }&lt;br/&gt;        dir = (DIRECTION)((dir + 1) % 4);&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;算法点评&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;直接模拟算法能解决很多问题,写起来还特别快速.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;优点&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;算法思想直观, 实现简单, 在成功精确控制边界变量时很有成就感。&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;缺点&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;由于对目标数组的访问不是线性的, 在50%的情况下是跨行访问, 在数组尺寸较大时会出现细微性能问题。这个可以参考老赵的文章&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/JeffreyZhao/archive/2009/01/22/system-architecture-and-program-performance.html"&gt;&lt;font color="#669966"&gt;计算机体系结构与程序性能&lt;/font&gt;&lt;/a&gt;&amp;nbsp;。我就是从那里学来的。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;但是&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;从园友　&lt;a href="http://home.cnblogs.com/u/drizzlecrj/"&gt;&lt;font color="#669966"&gt;农夫三拳&lt;/font&gt;&lt;/a&gt; 2007年的文章 &lt;a href="http://www.cnblogs.com/drizzlecrj/archive/2007/04/10/706784.html"&gt;&lt;font color="#669966"&gt;面试题-螺旋矩阵(模拟)&lt;/font&gt;&lt;/a&gt; 中我们就已经可以发现其实可以找到一定的数学规律，因此下一篇我们开始讨论究竟有多少隐藏的意义在这个螺旋数组当中。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;本篇总结&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;以下是个人牢骚，时间宝贵或不愿意听牢骚的情直接无视。&lt;/p&gt;&lt;p&gt;直接模拟算法，是我们广大程序员最熟悉的码代码的模式。而且它的确能胜任很多工作场合。错不在这个模式，在于我们的思维模式。&lt;/p&gt;&lt;p&gt;当思维模式成为思维定式，框死了我们的思想，从而感觉这个世界就是这样的，编码就是如此的，老子已经有5年编码经验了，老鸟了&amp;#8230;..&lt;/p&gt;&lt;p&gt;那么，不幸的是，&lt;font color="#ff0000"&gt;我们已经失去进步的机会了&lt;/font&gt;。&lt;/p&gt;&lt;p&gt;有很多事情我们不敢做，要么没时间做，但是如果连想都不敢想，甚至从来没主动尝试去想。&lt;/p&gt;&lt;p&gt;那么，没有自主思想的人，就是机器人，难听点的是僵尸。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;导读：&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;螺旋数组算法[上篇]--直接模拟算法&lt;/p&gt;&lt;p&gt;&lt;a id="ctl02_TitleUrl" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912829.html"&gt;&lt;font color="#000080"&gt;螺旋数组算法[中篇]--常规数学分析&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;螺旋数组算法[下篇]--努力接近需求的本质 预计12/23日发布&lt;/p&gt;&lt;/font&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/1912542.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/21/1912542.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2010/12/04/1896627.html</id><title type="text">标准答案-有多少人能分得清值类型和引用类型?</title><summary type="text">引子： TomiWong 园友发了一个帖子 有多少人能分得清值类型和引用类型? 问题：“class、object、string、int、bool、byte、interface、delegate、str...</summary><published>2010-12-04T13:50:00Z</published><updated>2010-12-04T13:50:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/04/1896627.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/04/1896627.html"/><content type="html">&lt;p&gt;引子：&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/tomi/"&gt;TomiWong&lt;/a&gt; 园友发了一个帖子 &lt;a href="http://www.cnblogs.com/tomi/archive/2010/12/03/1895667.html"&gt;有多少人能分得清值类型和引用类型?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;问题：&amp;#8220;class、object、string、int、bool、byte、interface、delegate、struct、enum，以上这些哪些是值类型，哪些是引用类型？&amp;#8221;&lt;/p&gt; &lt;p&gt;回帖无数，但是我发现多数还是不明真相的群众。少数几个其实已经感觉到了真相，但是没有表达清楚。因此特此撰文，以正视听。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;貌似正确的答案&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;如果要快速给一个一般性而言正确的答案，那么应该如下：&lt;/p&gt; &lt;p&gt;值类型： int, bool, byte, struct, enum&lt;/p&gt; &lt;p&gt;引用类型： class, object, string, interface, delegate&lt;/p&gt; &lt;p&gt;可是问题真那么简单么？难道很多回帖的兄弟都是胡闹？&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;核心问题&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;对问题里面的英文理解有歧义&lt;/p&gt; &lt;p&gt;题目应该试图问的，是&lt;strong&gt;&lt;font size="3"&gt;&lt;font color="#ff0000"&gt;用&lt;/font&gt;&lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;这&lt;/font&gt;些关键字定义并声明出来的变量分别是值类型还是引用类型&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;看看几个有代表性的意见：&lt;/p&gt; &lt;p&gt;============================&lt;/p&gt; &lt;p&gt;#4楼2010-12-03 17:14 | xiaotie&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;interface 和其它的不一样吧&lt;/p&gt; &lt;p&gt;============================&lt;/p&gt; &lt;p&gt;#14楼2010-12-03 17:26 | Ivony...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;在这些东西里面：&lt;br /&gt;object、string、int、bool、byte&lt;br /&gt;是类型&lt;/p&gt; &lt;p&gt;class、interface、delegate、struct、enum&lt;br /&gt;不是类型&lt;/p&gt; &lt;p&gt;只能说使用这些关键字定义的类型是引用类型还是值类型&lt;/p&gt; &lt;p&gt;============================&lt;/p&gt; &lt;p&gt;#18楼2010-12-03 17:30 | LeonSun&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;我就想问一个问题，class是什么类型？object是什么类型？&lt;/p&gt; &lt;p&gt;本来这个题对名词的定义就是模糊的，恐怕出这个题的人概念也是模糊的&lt;/p&gt; &lt;p&gt;别来误导群众了，真的～～～&lt;/p&gt; &lt;p&gt;============================&lt;/p&gt; &lt;p&gt;好了，意见还是不少的。让我们从头开始梳理问题出在哪里？&lt;/p&gt; &lt;p&gt;1、区分int类型和int类型变量&lt;/p&gt; &lt;p&gt;2、定义&lt;a href="http://www.cnblogs.com/tomi/"&gt;TomiWong&lt;/a&gt;问题中提到的int是指int型变量还是指int关键字？&lt;/p&gt; &lt;p&gt;3、然后我们才可以开始回答问题&lt;/p&gt; &lt;p&gt;我们平时说惯了，说int是值类型。教科书式的回答应该类似是：&lt;/p&gt; &lt;p&gt;&lt;font style="background-color: #ffff00" size="4"&gt;&lt;strong&gt;int类型的变量是值类型变量&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;由此，我们推导出一个简化的说法&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="background-color: #ffff00" size="4"&gt;int类型是值类型&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;不少同学在interface、class、object几个关键字上一下子转不过弯来。的确，这几个东西平时不考虑的。我们只说对象类型的变量是引用类型变量，因此看到class的时候第一反应就是他不能算是对象，类不是对象这个是天条。呵呵&lt;/p&gt; &lt;p&gt;这里就出现一个双重标准的问题：&lt;/p&gt; &lt;p&gt;把问题中的所有东西看作他对应的变量，还是就是看做这个关键字，或者看做其代表的类型&lt;/p&gt; &lt;p&gt;class的中文翻译是类，请问类是什么类型？应该什么都不是&lt;/p&gt; &lt;p&gt;如果都看作是关键字，则这些东西也都什么类型都不是&lt;/p&gt; &lt;p&gt;只有当我们统一把他们都看作是变量，是用这些关键字定义并声明出来的变量的时候，才能心平气和地去回答问题&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;标准答案&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;C# 类型体系包含下列几种类别：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;值类型、引用类型、指针类型&lt;/p&gt; &lt;p&gt;值类型的变量存储数据，而引用类型的变量存储对实际数据的引用。引用类型也称为对象。指针类型仅可用于 unsafe 模式(往极端上说，指针也是值类型)。&lt;/p&gt; &lt;p&gt;通过装箱和取消装箱，可以将值类型转换为引用类型，然后再转换回值类型。除了装箱值类型外，无法将引用类型转换为值类型。&lt;/p&gt; &lt;p&gt;值类型也可以为空(可空类型如：int?)，这意味着它们能存储法非值状态。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;值类型主要由两类组成：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;结构、枚举&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;结构分为以下几类：&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Numeric（数值）类型&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整型、浮点型、decimal&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整型包括：sbyte, byte, char, short, ushort, int, unit, long, ulong&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 浮点型包括：float, double&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用户定义的结构。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;引用类型的变量又称为对象，可存储对实际数据的引用。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;class、interface、delegate&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;内置引用类型：object、string&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;其实这答案都不是我写的&lt;/p&gt; &lt;p&gt;参考文献&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn.microsoft.com/zh-cn/library/3ewxz6et(v=VS.80).aspx" href="http://msdn.microsoft.com/zh-cn/library/3ewxz6et(v=VS.80).aspx" target="_blank"&gt;类型(C#)&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://msdn.microsoft.com/zh-cn/library/s1ax56ch(VS.80).aspx" href="http://msdn.microsoft.com/zh-cn/library/s1ax56ch(VS.80).aspx" target="_blank"&gt;值类型(C#)&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://msdn.microsoft.com/zh-cn/library/490f96s2(v=VS.80).aspx" href="http://msdn.microsoft.com/zh-cn/library/490f96s2(v=VS.80).aspx" target="_blank"&gt;引用类型(C#)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;我们都需要抽空看看&amp;nbsp; &lt;a title="http://msdn.microsoft.com/zh-cn/library/67ef8sbd(v=VS.80).aspx" href="http://msdn.microsoft.com/zh-cn/library/67ef8sbd(v=VS.80).aspx" target="_blank"&gt;C#编程指南&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/1896627.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2010/12/04/1896627.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2010/11/12/1875968.html</id><title type="text">360公布权威机构对扣扣保镖的测试报告</title><summary type="text">那么现在，那些“可以”查杀扣扣保镖的安全软件情以何堪？跟着腾讯这个流氓，一起脱掉内裤么？金山？以后拿什么相信你？虽然以前也不很欣赏你可牛？以后拿什么相信你？虽然以前根本不认识你继续观察，那些失去诚信，没有道德准则，只有商业利益的公司，最后能挣到几个商业利益</summary><published>2010-11-12T11:31:00Z</published><updated>2010-11-12T11:31:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/12/1875968.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/12/1875968.html"/><content type="html">&lt;p&gt;原文链接&lt;/p&gt;&lt;p&gt;&lt;a href="http://bbs.360.cn/3237987/40119072.html"&gt;http://bbs.360.cn/3237987/40119072.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;作为技术人员，我一直认为至少有一个是非曲直是可以非常客观衡量的&lt;/p&gt;&lt;p&gt;那就是软件本身是否有问题&lt;/p&gt;&lt;p&gt;11月12日，我国信息安全领域的权威测试机构&amp;#8212;&amp;#8212;中国信息安全测评中心公布了对360扣扣保镖（版本号v1.0.0.1005）的检测报告。检测结果显示，未发现360扣扣保镖存在明显可被利用的脆弱性，未发现扣扣保镖存在自我复制行为，未发现扣扣保镖有不正常的向服务器发送数据的行为，等等。多位专家认为，检测报告证实了360扣扣保镖不是木马病毒，也不存在所谓&amp;#8220;后门&amp;#8221;和窃取用户隐私、复制QQ好友信息的行为。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;那么现在，那些&amp;#8220;可以&amp;#8221;查杀扣扣保镖的安全软件情以何堪？&lt;/p&gt;&lt;p&gt;跟着腾讯这个流氓，一起脱掉内裤么？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;金山？以后拿什么相信你？虽然以前也不很欣赏你&lt;/p&gt;&lt;p&gt;可牛？以后拿什么相信你？虽然以前根本不认识你&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;继续观察，那些失去诚信，没有道德准则，只有商业利益的公司，最后能挣到几个商业利益&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;当然，除非下一集连续剧里面，中国信息安全测评中心成了幕后的大反派&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;=====================&lt;/p&gt;&lt;p&gt;上网搜了一下，百度的搜索引擎绝对比不过google的&lt;/p&gt;&lt;p&gt;有图有真相&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/google.PNG" width="930" height="638" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/chinese-xu/baidu.PNG" width="618" height="662" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/1875968.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/12/1875968.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2010/11/03/1868483.html</id><title type="text">世界网络奇观！QQ论坛被可能都是“枪手”的人疯狂灌水</title><summary type="text">http://w.bbs.qq.com/b-1001023996/l-1.html留贴纪念刚去看的时候只有两页了，除了论坛公告意外只有10个新帖，100%都是攻击腾讯的。每3描刷新一下旧帖都被管理员删除，不过新的100%攻击腾讯的帖子又出现了目前已经扩展到4页，不知道是管理员来不及删，还是360请了更多的枪手希望腾讯能有效统计攻击者的IP地址，然后再公告中明确警告360不要搞如此无聊的行为！呵呵据...</summary><published>2010-11-03T13:29:00Z</published><updated>2010-11-03T13:29:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/03/1868483.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/03/1868483.html"/><content type="html">&lt;p&gt;&lt;a href="http://w.bbs.qq.com/b-1001023996/l-1.html"&gt;http://w.bbs.qq.com/b-1001023996/l-1.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;留贴纪念&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;刚去看的时候只有两页了，除了论坛公告意外只有10个新帖，100%都是攻击腾讯的。&lt;/p&gt;&lt;p&gt;每3描刷新一下&lt;/p&gt;&lt;p&gt;旧帖都被管理员删除，不过新的100%攻击腾讯的帖子又出现了&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;目前已经扩展到4页，不知道是管理员来不及删，还是360请了更多的枪手&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;希望腾讯能有效统计攻击者的IP地址，然后再公告中明确警告360不要搞如此无聊的行为！呵呵&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;据说有图有真相&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/chinese-xu/qqbbs.PNG" width="1217" height="719" alt="" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/1868483.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/03/1868483.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Chinese-xu/archive/2010/11/02/1867263.html</id><title type="text">也说狗咬狗的价值，谈360和QQ的纷争</title><summary type="text">也说狗咬狗的价值，谈360和QQ的纷争</summary><published>2010-11-02T08:12:00Z</published><updated>2010-11-02T08:12:00Z</updated><author><name>徐少侠</name><uri>http://www.cnblogs.com/Chinese-xu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/02/1867263.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/02/1867263.html"/><content type="html">&lt;p&gt;略去过程5000字&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;目前有一种类型的回帖比较有趣：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;两家公司狗咬狗，都不是好人。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这种论调的结果是直接有利于腾讯公司的。虽然透视黑两家公司，表面上看大家都吃亏。但是本质是鼓动广大网民不要参与这种所谓垃圾和垃圾之间的对决。它试图公众关注度努力降低。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我不直接评论这种论调的正确性，即使我上面的分析有错误也不是我的重点&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;重点是即使真的是狗咬狗也是有价值的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;记得上学时候一直有老师，尤其是历史、政治老师说西方的政客其实别看执政党反对党的，本质都是资本家的傀儡，都是为了一己之私的。&lt;/p&gt;&lt;p&gt;所谓国会、议会，对，也是狗咬狗。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;不过有些狗和狗咬完后至少会有点结果出来，至少表面上能让其他的狗以后不要互相就相同的问题继续咬，再次咬&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;不晓得的这次360和腾讯这两个狗咬完后除了一地狗毛会给江湖留下些什么？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;PS:本人支持360&lt;/p&gt;&lt;p&gt;即使360的动机再龌龊，经济利益再隐蔽&lt;/p&gt;&lt;p&gt;用错误的手段为你做对你有益的事在中国是说的过去的&lt;/p&gt;&lt;p&gt;而用正确的手段帮你做对你有损的事，谁受得了？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Chinese-xu/aggbug/1867263.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Chinese-xu/archive/2010/11/02/1867263.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
