<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>浩行天下 ghSky-&#62;Blog &#187; Programming</title>
	<atom:link href="http://ghsky.com/category/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://ghsky.com</link>
	<description>热衷于前端技术 (X)HTML, CSS, JavaScript</description>
	<lastBuildDate>Sat, 24 Jul 2010 09:30:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<atom:link rel='hub' href='http://ghsky.com/?pushpress=hub'/>
		<item>
		<title>也谈排序算法</title>
		<link>http://ghsky.com/2010/06/also-talk-about-sorting-method.html</link>
		<comments>http://ghsky.com/2010/06/also-talk-about-sorting-method.html#comments</comments>
		<pubDate>Sat, 26 Jun 2010 15:43:00 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[分治算法]]></category>
		<category><![CDATA[合并排序]]></category>
		<category><![CDATA[快速排序]]></category>
		<category><![CDATA[排序算法]]></category>

		<guid isPermaLink="false">http://ghsky.com/2010/06/also-talk-about-sorting-method.html</guid>
		<description><![CDATA[最近期末复习正好看到算法的分治策略，里面讲到两种排序算法：合并排序和快速排序。这里大概就谈下自己对算法的理解，代码不是最重要的，思想才是精华，所以这次不打算讲太多代码。 首先说一下分治法的基本思想，分治法是把一个规模为n的问题分解为k个规模较小的子问题，这些子问题相互独立且与原问题相同（这里需要注意分治算法与动态规划的区别）。递归地解这些子问题，然后将各子问题的解合并得到原问题的解。这里要谈到的合并排序和快速排序便是分治算法的典型应用之一。 首先看合并排序，其基本思想是将待排序元素分成大小大致相同的2个子集合，分别对2个子集合进行排序，最终讲排好序的子集合合并成为所要求的排好序的集合。算法一般通过计算两个边界的中点作为分界点，然后再递归调用对左半边和右半边分别合并排序，递归中止条件自然是左边界小于右边界，即保证至少有两个元素参与排序。当一轮调用中，左半边和右半边分别排序完成后（或无法再划分进行排序后），就进行合并，其中对元素的真正排序便是在合并中完成的，利用一个临时数组完成对排序后数组两边元素的排序、合并。如下是一个合并排序的过程图，其中S代表mergeSort函数，即递归函数，其中参数待排序数组，左分界点，右分界点；m代表merge函数，即排序、合并函数，其参数分别为待合并数组，目的合并数组，合并左分界点，合并中点，合并右分界点。 再来看看快速排序，其基本思想是对于输入的子数组a[p:r]，按以下3个步骤进行排序： 分解(divide)：以a[p]为某基准元素，将a[p:r]划分成3段，a[p:q-1]， a[q]和a[q+1:r]，使得a[p:q-1]中的任何元素都小于等于a[q]，而a[q+1:r]中的任何元素大于等于a[q]，q在划分中确定； 递归求解(conquer)：通过递归调用快速排序算法，分别对a[p:q-1]和a[q+1:r]进行排序； 合并(merge)：由于对a[p:q-1]和a[q+1:]r的排序在分解过程中就已经完成，所以当前a[p:q-1]和a[q+1:r]中的元素都已经排好序了，无须再执行任何计算，a[p:r]就已经完成排序了。 如下以a = [5, 3, 7, 2, 6, 4, 8, 1, 9]为例，具体分析一下快速排序的过程，【】表示划分元素，｛｝表示需交换元素。 由上述分别对两种算法的说明，大致也能看出两算法的异同之处。两种算法都考虑到使用划分元素的方法进行分治的依据，但合并排序的划分元素是直接去两边界的中点，而快速排序的划分点则是在排序中找到；合并排序首先进行划分，然后再对划分的部分递归调用，而快速排序则是在排序过程中找到划分点，之后再递归调用；再次，合并排序需要借助一个临时数组完成合并操作，而快速排序则不需要特别地合并操作，也无需临时数组，其排序是在划分中完成，而合并则只需简单连接即可。 虽然自己已经对上述算法有了比较具体的了解，但是要深入理解还是需要慢慢体会，领悟其中玄机，同时也需要在不参考参考程序的过程中，完成自己程序的编写，这样不但锻炼了编程能力，更加需要对算法本身有较透彻的理解，所以下一步自己需要用一门语言用自己的方法实现算法。]]></description>
			<content:encoded><![CDATA[<p>最近期末复习正好看到算法的分治策略，里面讲到两种排序算法：合并排序和快速排序。这里大概就谈下自己对算法的理解，代码不是最重要的，思想才是精华，所以这次不打算讲太多代码。</p>
<p>首先说一下分治法的基本思想，分治法是把一个规模为n的问题分解为k个规模较小的子问题，这些子问题<strong>相互独立且与原问题相同</strong>（这里需要注意分治算法与动态规划的区别）。递归地解这些子问题，然后将各子问题的解合并得到原问题的解。这里要谈到的合并排序和快速排序便是分治算法的典型应用之一。</p>
<p>首先看合并排序，其基本思想是将待排序元素分成大小大致相同的2个子集合，分别对2个子集合进行排序，最终讲排好序的子集合合并成为所要求的排好序的集合。算法一般通过计算两个边界的中点作为分界点，然后再递归调用对左半边和右半边分别合并排序，递归中止条件自然是左边界小于右边界，即保证至少有两个元素参与排序。当一轮调用中，左半边和右半边分别排序完成后（或无法再划分进行排序后），就进行合并，其中对元素的真正排序便是在合并中完成的，利用一个临时数组完成对排序后数组两边元素的排序、合并。如下是一个合并排序的过程图，其中S代表mergeSort函数，即递归函数，其中参数待排序数组，左分界点，右分界点；m代表merge函数，即排序、合并函数，其参数分别为待合并数组，目的合并数组，合并左分界点，合并中点，合并右分界点。</p>
<p><a href="http://ghsky.com/wp-content/uploads/2010/06/mergesort1.png" target="_blank"><img style="margin: 0px auto 10px; display: block; float: none" class="wlDisabledImage" title="mergesort" alt="mergesort" src="http://ghsky.com/wp-content/uploads/2010/06/mergesort_thumb1.png" width="527" height="234" /></a></p>
<p>再来看看快速排序，其基本思想是对于输入的子数组a[p:r]，按以下3个步骤进行排序：</p>
<ol>
<li>分解(divide)：以a[p]为某基准元素，将a[p:r]划分成3段，a[p:q-1]， a[q]和a[q+1:r]，使得a[p:q-1]中的任何元素都小于等于a[q]，而a[q+1:r]中的任何元素大于等于a[q]，q在划分中确定；</li>
<li>递归求解(conquer)：通过递归调用快速排序算法，分别对a[p:q-1]和a[q+1:r]进行排序；</li>
<li>合并(merge)：由于对a[p:q-1]和a[q+1:]r的排序在分解过程中就已经完成，所以当前a[p:q-1]和a[q+1:r]中的元素都已经排好序了，无须再执行任何计算，a[p:r]就已经完成排序了。</li>
</ol>
<p>如下以a = [5, 3, 7, 2, 6, 4, 8, 1, 9]为例，具体分析一下快速排序的过程，【】表示划分元素，｛｝表示需交换元素。</p>
<p><a href="http://ghsky.com/wp-content/uploads/2010/06/quicksort.png" target="_blank"><img style="margin: 0px 0px 10px; display: inline" class="wlDisabledImage" title="quicksort" alt="quicksort" src="http://ghsky.com/wp-content/uploads/2010/06/quicksort_thumb.png" width="527" height="287" /></a></p>
<p>由上述分别对两种算法的说明，大致也能看出两算法的异同之处。两种算法都考虑到使用划分元素的方法进行分治的依据，但合并排序的划分元素是直接去两边界的中点，而快速排序的划分点则是在排序中找到；合并排序首先进行划分，然后再对划分的部分递归调用，而快速排序则是在排序过程中找到划分点，之后再递归调用；再次，合并排序需要借助一个临时数组完成合并操作，而快速排序则不需要特别地合并操作，也无需临时数组，其排序是在划分中完成，而合并则只需简单连接即可。</p>
<p>虽然自己已经对上述算法有了比较具体的了解，但是要深入理解还是需要慢慢体会，领悟其中玄机，同时也需要在不参考参考程序的过程中，完成自己程序的编写，这样不但锻炼了编程能力，更加需要对算法本身有较透彻的理解，所以下一步自己需要用一门语言用自己的方法实现算法。</p>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2010/06/also-talk-about-sorting-method.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>不同进制之间的转换的各种方法</title>
		<link>http://ghsky.com/2007/10/how-to-conver-binary-octal-metric-hexadecimal.html</link>
		<comments>http://ghsky.com/2007/10/how-to-conver-binary-octal-metric-hexadecimal.html#comments</comments>
		<pubDate>Thu, 18 Oct 2007 13:22:46 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/2007/10/how-to-conver-binary-octal-metric-hexadecimal.html</guid>
		<description><![CDATA[不同进制之间的转换纯粹是数学上的计算。不过，你不必担心会有么复杂，无非是乘或除的计算。 生活中其实很多地方的计数方法都多少有点不同进制的影子。 比如我们最常用的10进制，其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况，我想我们现在一定是在使用20进制。 至于二进制……没有袜子称为0只袜子，有一只袜子称为1只袜子，但若有两袜子，则我们常说的是：1双袜子。 生活中还有：七进制，比如星期。十二进制，比如“一打”，六十进制，比如分钟…… 一、为什么需要八进制和十六进制? 编程中，我们常用的还是10进制……必竟VB是高级语言。 比如：a = 99; 不过，由于数据在计算机中的表示，最终以二进制的形式存在，所以有时候使用二进制，可以更直观地解决问题。但是二进制数太长了。比如int 类型占用4个字节，32位。比如100，用int类型的二进制数表达将是：0000 0000 0000 0000 0110 0100 面对这么长的数进行思考或操作，没有人会喜欢。因此，C,C++ 没有提供在代码直接写二进制数的方法。 　 用16进制或8进制可以解决这个问题。因为，进制越大，数的表达长度也就越短。不过，为什么偏偏是16或8进制，而不其它的，诸如9或20进制呢？ 2、8、16，分别是2的1次方，3次方，4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数，但保持了二进制数的表达特点。在下面的关于进制转换的课程中，你可以发现这一点。　 二、八、十六进制数转换到十进制数 2.1 二进制数转换为十进制数 二进制数第0位的权值是2的0次方，第1位的权值是2的1次方…… 所以，设有一个二进制数：0110 0100，转换为10进制为： 下面是竖式： 0110 0100 换算成 十进制 第0位 0 * 20 = 0 第1位 0 * 21 = 0 第2位 1 * 22 = 4 第3位 0 * 23 [...]]]></description>
			<content:encoded><![CDATA[<p>不同进制之间的转换纯粹是数学上的计算。不过，你不必担心会有么复杂，无非是乘或除的计算。<br />
生活中其实很多地方的计数方法都多少有点不同进制的影子。</p>
<p>比如我们最常用的10进制，其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况，我想我们现在一定是在使用20进制。</p>
<p>至于二进制……没有袜子称为0只袜子，有一只袜子称为1只袜子，但若有两袜子，则我们常说的是：1双袜子。</p>
<p>生活中还有：七进制，比如星期。十二进制，比如“一打”，六十进制，比如分钟……</p>
<p><strong>一、为什么需要八进制和十六进制?</strong></p>
<p>编程中，我们常用的还是10进制……必竟VB是高级语言。<br />
比如：a = 99;<br />
不过，由于数据在计算机中的表示，最终以二进制的形式存在，所以有时候使用二进制，可以更直观地解决问题。但是二进制数太长了。比如int 类型占用4个字节，32位。比如100，用int类型的二进制数表达将是：0000 0000 0000 0000 0110 0100<br />
面对这么长的数进行思考或操作，没有人会喜欢。因此，C,C++ 没有提供在代码直接写二进制数的方法。<br />
　<br />
用16进制或8进制可以解决这个问题。因为，进制越大，数的表达长度也就越短。不过，为什么偏偏是16或8进制，而不其它的，诸如9或20进制呢？</p>
<p>2、8、16，分别是2的1次方，3次方，4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数，但保持了二进制数的表达特点。在下面的关于进制转换的课程中，你可以发现这一点。<span id="more-109"></span>　</p>
<p><strong>二、八、十六进制数转换到十进制数</strong></p>
<p>2.1 二进制数转换为十进制数<br />
二进制数第0位的权值是2的0次方，第1位的权值是2的1次方……</p>
<p>所以，设有一个二进制数：0110 0100，转换为10进制为：</p>
<p>下面是竖式：</p>
<p>0110 0100 换算成 十进制</p>
<p>第0位 0 * 20   =   0<br />
第1位 0 * 21   =   0<br />
第2位 1 * 22   =   4<br />
第3位 0 * 23   =   0<br />
第4位 0 * 24   =   0<br />
第5位 1 * 25   = 32<br />
第6位 1 * 26   = 64<br />
第7位 0 * 27   =   0      ＋<br />
---------------------------<br />
                      100   </p>
<p>用横式计算为：<br />
0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100</p>
<p>0乘以多少都是0，所以我们也可以直接跳过值为0的位：<br />
1 * 22 + 1 * 23 +   1 * 25 + 1 * 26 = 100</p>
<p>2.2 八进制数转换为十进制数</p>
<p>八进制就是逢8进1。</p>
<p>八进制数采用 0～7这八数来表达一个数。</p>
<p>八进制数第0位的权值为8的0次方，第1位权值为8的1次方，第2位权值为8的2次方……</p>
<p>所以，设有一个八进制数：1507，转换为十进制为：</p>
<p>用竖式表示：</p>
<p>1507换算成十进制。</p>
<p>第0位 7 * 80 = 7<br />
第1位 0 * 81 = 0<br />
第2位 5 * 82 = 320<br />
第3位 1 * 83 = 512    ＋<br />
--------------------------<br />
                    839</p>
<p>同样，我们也可以用横式直接计算：<br />
7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839</p>
<p>结果是，八进制数 1507 转换成十进制数为 839</p>
<p>2.3 八进制数的表达方法<br />
C,C++语言中，如何表达一个八进制数呢？如果这个数是 876,我们可以断定它不是八进制数，因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567，或12345670，那么它是八进制数还是10进制数，都有可能。</p>
<p>所以,C,C++规定，一个数如果要指明它采用八进制，必须在它前面加上一个0，如：123是十进制，但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。</p>
<p>由于C和C++都没有提供二进制数的表达方法，所以，这里所学的八进制是我们学习的，CtC++语言的数值表达的第二种进制法。</p>
<p>现在，对于同样一个数，比如是100，我们在代码中可以用平常的10进制表达，例如在变量初始化时：<br />
int a = 100;</p>
<p>我们也可以这样写：<br />
int a = 0144; //0144是八进制的100；一个10进制数如何转成8进制，我们后面会学到。</p>
<p>千万记住，用八进制表达时，你不能少了最前的那个0。否则计算机会通通当成10进制。不过，有一个地方使用八进制数时，却不能使用加0，那就是我们前面学的用于表达字符的“转义符”表达法。</p>
<p>2.4 八进制数在转义符中的使用<br />
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法，如：'\n'表示换行(line)，而'\t'表示Tab字符，'\''则表示单引号。今天我们又学习了一种使用转义符的方法：转义符'\'后面接一个八进制数，用于表示ASCII码等于该值的字符。</p>
<p>比如，查一下第5章中的ASCII码表，我们找到问号字符（?)的ASCII值是63，那么我们可以把它转换为八进值：77，然后用 '\77'来表示'?'。由于是八进制，所以本应写成 '\077'，但因为C,C++规定不允许使用斜杠加10进制数来表示字符，所以这里的0可以不写。</p>
<p>2.5 十六进制数转换成十进制数<br />
2进制，用两个阿拉伯数字：0、1；<br />
8进制，用八个阿拉伯数字：0、1、2、3、4、5、6、7；<br />
10进制，用十个阿拉伯数字：0到9；<br />
16进制，用十六个阿拉伯数字……等等，阿拉伯人或说是印度人，只发明了10个数字啊？</p>
<p>16进制就是逢16进1，但我们只有0~9这十个数字，所以我们用A，B，C，D，E，F这五个字母来分别表示10，11，12，13，14，15。字母不区分大小写。</p>
<p>十六进制数的第0位的权值为16的0次方，第1位的权值为16的1次方，第2位的权值为16的2次方……</p>
<p>所以，在第N（N从0开始）位上，如果是是数 X （X 大于等于0，并且X小于等于 15，即：F）表示的大小为 X * 16的N次方。</p>
<p>假设有一个十六进数 2AF5, 那么如何换算成10进制呢？</p>
<p>用竖式计算：</p>
<p>2AF5换算成10进制:</p>
<p>第0位：   5 * 160 = 5<br />
第1位：   F * 161 = 240<br />
第2位：   A * 162 = 2560<br />
第3位：   2 * 163 = 8192   ＋<br />
-------------------------------------<br />
                          10997  </p>
<p>直接计算就是：<br />
5 * 160   + F * 161 + A * 162 + 2 * 163 = 10997<br />
(别忘了，在上面的计算中，A表示10，而F表示15)</p>
<p>现在可以看出，所有进制换算成10进制，关键在于各自的权值不同。</p>
<p>假设有人问你，十进数 1234 为什么是一千二百三十四？你尽可以给他这么一个算式：<br />
1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100<br />
　</p>
<p>2.6   十六进制数的表达方法<br />
如果不使用特殊的书写形式，16进制数也会和10进制相混。随便一个数：9876，就看不出它是16进制或10进制。</p>
<p>C，C++规定，16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如：0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意：0x中的0是数字0，而不是字母O)</p>
<p>以下是一些用法示例：<br />
int a = 0x100F;<br />
int b = 0x70 + a;</p>
<p>至此，我们学完了所有进制：10进制，8进制，16进制数的表达方式。</p>
<p>2.7 十六进制数在转义符中的使用<br />
转义符也可以接一个16进制数来表示一个字符。如在6.2.4小节中说的 '?' 字符，可以有以下表达方式：<br />
'?'      //直接输入字符<br />
'\77'    //用八进制，此时可以省略开头的0<br />
'\0x3F' //用十六进制</p>
<p>同样，这一小节只用于了解。除了空字符用八进制数 '\0' 表示以外，我们很少用后两种方法表示一个字符。</p>
<p>三、十进制数转换到二、八、十六进制数</p>
<p>3.1 10进制数转换为2进制数<br />
给你一个十进制，比如：6，如果将它转换成二进制数呢？</p>
<p>10进制数转换成二进制数，这是一个连续除2的过程：</p>
<p>把要转换的数，除以2，得到商和余数，</p>
<p>将商继续除以2，直到商为0。最后将所有余数倒序排列，得到数就是转换结果。</p>
<p>听起来有些糊涂？我们结合例子来说明。比如要转换6为二进制数。</p>
<p>“把要转换的数，除以2，得到商和余数”。</p>
<p>那么：</p>
<p>要转换的数是6， 6 ÷ 2，得到商是3，余数是0。（不要告诉我你不会计算6÷3！）</p>
<p>“将商继续除以2,直到商为0……”</p>
<p>现在商是3，还不是0，所以继续除以2。</p>
<p>那就： 3 ÷ 2, 得到商是1,余数是1。</p>
<p>“将商继续除以2，直到商为0……”</p>
<p>现在商是1，还不是0，所以继续除以2。</p>
<p>那就： 1 ÷ 2, 得到商是0，余数是1 （拿笔纸算一下，1÷2是不是商0余1!）</p>
<p>“将商继续除以2，直到商为0……最后将所有余数倒序排列”</p>
<p>好极！现在商已经是0。</p>
<p>我们三次计算依次得到余数分别是：0、1、1，将所有余数倒序排列，那就是：110了！</p>
<p>6转换成二进制，结果是110。<br />
把上面的一段改成用表格来表示，则为：</p>
<p>被除数 计算过程 商 余数<br />
6          6/2      3   0<br />
3          3/2      1   1<br />
1          1/2      0   1 </p>
<p>如果是在考试时，我们要画这样表还是有点费时间，所更常见的换算过程是使用下图的连除：<br />
<img src="http://www.d2school.com/bcyl/bhcpp/newls/images/ls06/ls06.h2.gif" alt="" /><br />
请大家对照图，表，及文字说明，并且自已拿笔计算一遍如何将6转换为二进制数。</p>
<p>说了半天，我们的转换结果对吗？二进制数110是6吗？你已经学会如何将二进制数转换成10进制数了，所以请现在就计算一下110换成10进制是否就是6。</p>
<p>3.2 10进制数转换为8、16进制数<br />
非常开心，10进制数转换成8进制的方法，和转换为2进制的方法类似，惟一变化：除数由2变成8。</p>
<p>来看一个例子，如何将十进制数120转换成八进制数。</p>
<p>用表格表示：</p>
<p>被除数 计算过程 商 余数<br />
120      120/8  15   0<br />
15         15/8    1   7<br />
1            1/8    0   1 </p>
<p>120转换为8进制，结果为：170。</p>
<p>非常非常开心，10进制数转换成16进制的方法，和转换为2进制的方法类似，惟一变化：除数由2变成16。</p>
<p>同样是120，转换成16进制则为：</p>
<p>被除数 计算过程 商 余数<br />
120     120/16  7    8<br />
7           7/16  0    7 </p>
<p>120转换为16进制，结果为：78。</p>
<p>四、二、十六进制数互相转换<br />
二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算，每个C，C++程序员都能做到看见二进制数，直接就能转换为十六进制数，反之亦然。</p>
<p>我们也一样，只要学完这一小节，就能做到。</p>
<p>首先我们来看一个二进制数：1111，它是多少呢？</p>
<p>你可能还要这样计算：1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。</p>
<p>然而，由于1111才4位，所以我们必须直接记住它每一位的权值，并且是从高位往低位记，：8、4、2、1。即，最高位的权值为23 ＝ 8，然后依次是 22 ＝ 4，21＝2， 20 ＝ 1。</p>
<p>记住8421，对于任意一个4位的二进制数，我们都可以很快算出它对应的10进制值。</p>
<p>下面列出四位二进制数 xxxx 所有可能的值（中间略过部分）</p>
<p>仅4位的2进制数   快速计算方法    十进制值      十六进值<br />
1111         = 8 + 4 + 2 + 1   =        15               F<br />
1110         = 8 + 4 + 2 + 0   =        14               E<br />
1101         = 8 + 4 + 0 + 1   =        13               D<br />
1100         = 8 + 4 + 0 + 0   =        12               C<br />
1011         = 8 + 4 + 0 + 1   =        11               B<br />
1010         = 8 + 0 + 2 + 0   =        10               A<br />
1001         = 8 + 0 + 0 + 1   =        10               9<br />
....<br />
0001         = 0 + 0 + 0 + 1   =         1                1<br />
0000         = 0 + 0 + 0 + 0   =         0                0</p>
<p>二进制数要转换为十六进制，就是以4位一段，分别转换为十六进制。</p>
<p>如(上行为二制数，下面为对应的十六进制)：<br />
1111 1101 ， 1010 0101 ， 1001 1011<br />
F     D    ，   A     5    ，   9     B  </p>
<p>反过来，当我们看到 FD时，如何迅速将它转换为二进制数呢？</p>
<p>先转换F：</p>
<p>看到F，我们需知道它是15（可能你还不熟悉A～F这五个数），然后15如何用8421凑呢？应该是8 + 4 + 2 + 1，所以四位全为1 ：1111。</p>
<p>接着转换 D：</p>
<p>看到D，知道它是13，13如何用8421凑呢？应该是：8 + 2 + 1,即：1011。</p>
<p>所以,FD转换为二进制数，为： 1111 1011</p>
<p>由于十六进制转换成二进制相当直接，所以，我们需要将一个十进制数转换成2进制数时，也可以先转换成16进制，然后再转换成2进制。</p>
<p>比如，十进制数 1234转换成二制数，如果要一直除以2，直接得到2进制数，需要计算较多次数。所以我们可以先除以16，得到16进制数:</p>
<p>被除数 计算过程 商 余数<br />
1234   1234/16 77 2<br />
77         77/16  4 13 (D)<br />
4            4/16  0 4 </p>
<p>结果16进制为： 0x4D2</p>
<p>然后我们可直接写出0x4D2的二进制形式： 0100 1011 0010。</p>
<p>其中对映关系为：<br />
0100 -- 4<br />
1011 -- D<br />
0010 -- 2</p>
<p>同样，如果一个二进制数很长，我们需要将它转换成10进制数时，除了前面学过的方法是，我们还可以先将这个二进制转换成16进制，然后再转换为10进制。</p>
<p>下面举例一个int类型的二进制数：</p>
<p>01101101 11100101 10101111 00011011</p>
<p>我们按四位一组转换为16进制： 6D E5 AF 1B    </p>
<p>5 原码、反码、补码<br />
　</p>
<p>结束了各种进制的转换，我们来谈谈另一个话题：原码、反码、补码。</p>
<p>我们已经知道计算机中，所有数据最终都是使用二进制数表达。</p>
<p>我们也已经学会如何将一个10进制数如何转换为二进制数。</p>
<p>不过，我们仍然没有学习一个负数如何用二进制表达。</p>
<p>比如，假设有一 int 类型的数，值为5，那么，我们知道它在计算机中表示为：<br />
00000000 00000000 00000000 00000101</p>
<p>5转换成二制是101，不过int类型的数占用4字节（32位），所以前面填了一堆0。</p>
<p>现在想知道，-5在计算机中如何表示？<br />
　<br />
在计算机中，负数以其正值的补码形式表达。</p>
<p>什么叫补码呢？这得从原码，反码说起。</p>
<p>原码：一个整数，按照绝对值大小转换成的二进制数，称为原码。<br />
比如 00000000 00000000 00000000 00000101 是 5的 原码。</p>
<p>反码：将二进制数按位取反，所得的新二进制数称为原二进制数的反码。<br />
取反操作指：原为1，得0；原为0，得1。（1变0; 0变1）</p>
<p>比如：将00000000 00000000 00000000 00000101每一位取反，得11111111 11111111 11111111 11111010。</p>
<p>称：11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。</p>
<p>反码是相互的，所以也可称：<br />
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。</p>
<p>补码：反码加1称为补码。</p>
<p>也就是说，要得到一个数的补码，先得到反码，然后将反码加上1，所得数称为补码。</p>
<p>比如：00000000 00000000 00000000 00000101 的反码是：11111111 11111111 11111111 11111010。</p>
<p>那么，补码为：<br />
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011</p>
<p>所以，-5 在计算机中表达为：11111111 11111111 11111111 11111011。转换为十六进制：0xFFFFFFFB。</p>
<p>再举一例，我们来看整数-1在计算机中如何表示。</p>
<p>假设这也是一个int类型，那么：<br />
1、先取1的原码：00000000 00000000 00000000 00000001<br />
2、得反码：      11111111 11111111 11111111 11111110<br />
3、得补码：      11111111 11111111 11111111 11111111<br />
可见，－1在计算机里用二进制表达就是全1。16进制为：0xFFFFFF。</p>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/10/how-to-conver-binary-octal-metric-hexadecimal.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>C#解决数学问题</title>
		<link>http://ghsky.com/2007/08/csharp-solve-math-problem.html</link>
		<comments>http://ghsky.com/2007/08/csharp-solve-math-problem.html#comments</comments>
		<pubDate>Mon, 06 Aug 2007 11:39:16 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=69</guid>
		<description><![CDATA[在VF看见的一个题目： HOHO，占字符…… 计算：1/2×3+1/3×4+1/4×5+.....1/99×100 写了个基本程序，不过无法实现分数显示结果 using System; using System.Collections.Generic; using System.Text; namespace Solve_1 { class Program { static void Main(string[] args) { int a = 2; int b = 3; float ans = 0; while (b =num1) { temp=num;num=num1;num1=temp;} while(b!=0) { temp=a%b;a=b;b=temp;} printf("最大公约数：%d\n",a); printf("最小公倍数：%d\n",num*num1/a); } using System; using System.Collections.Generic; using System.Text; namespace Solve_1 { class Program [...]]]></description>
			<content:encoded><![CDATA[<p>在VF看见的一个题目：<br />
HOHO，占字符……</p>
<blockquote><p>
计算：1/2×3+1/3×4+1/4×5+.....1/99×100
</p></blockquote>
<p>写了个基本程序，不过无法实现分数显示结果</p>
<pre class="brush:csharp">
using System;
using System.Collections.Generic;
using System.Text;

namespace Solve_1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 2;
            int b = 3;
            float ans = 0;
            while (b <= 100)
            {
                float num1 = (float)a;
                float num2 = (float)b;
                ans =ans + 1 / num1 * num2;
                a++;
                b++;
             }
             Console.WriteLine(ans);
        }
    }
}
</pre>
<p><span id="more-69"></span><br />
后面经过努力，搞定了一个，不知道是不是正确的<br />
不过首先得研究一下C#里面最大公约数的算法，附带最小公倍数的</p>
<p>辗转相除法<br />
「辗转相除法」又叫做「欧几里得算法」,是公元前 300 年左右的希腊数学家欧几里得在他的著作《几何原本》提出的.利用这个方法,可以较快地求出两个自然数的最大公因数,即 HCF 或叫做 gcd.所谓最大公因数,是指几个数的共有的因数之中最大的一个,例如 8 和 12 的最大公因数是 4,记作 gcd(8,12)=4.</p>
<p>在介绍这个方法之前,先说明整除性的一些特点,注以下文的所有数都是正整数,以后不再重覆.<br />
我们可以这样给出整除以的定义:<br />
对於两个自然数 a 和 b,若存在正整数 q,使得 a=bq,则 b 能整除 a,记作 b | a,我们叫 b 是 a 的因数,而 a 是 b 的倍数.<br />
那麼如果 c | a,而且 c | b,则 c 是 a 和 b 的公因数.</p>
<p>由此,我们可以得出以下一些推论:<br />
推论一:如果 a | b,若 k 是整数,则 a | kb.因为由 a | b 可知 ha=b,所以 (hk)a=kb,即 a | kb.<br />
推论二:如果 a | b 以及 a | c,则 a | (b±c).因为由 a | b 以及 a | c,可知 ha=b,ka=c,二式相加,得 (h+k)a=b+c,即 a | (b+c).同样把二式相减可得 a | (b-c).<br />
推论三:如果 a | b 以及 b | a,则 a=b.因为由 a | b 以及 b | a,可知 ha=b,a=kb,因此 a=k(ha),hk=1,由於 h 和 k 都是正整数,故 h=k=1,因此 a=b.</p>
<p>辗转相除法是用来计算两个数的最大公因数,在数值很大时尤其有用而且应用在电脑程式上也十分简单.其理论如下:<br />
如果 q 和 r 是 m 除以 n 的商及余数,即 m=nq+r,则 gcd(m,n)=gcd(n,r).<br />
证明是这样的:<br />
设 a=gcd(m,n),b=gcd(n,r)<br />
则有 a | m 及 a | n,因此 a | (m-nq)(这是由推论一及推论二得出的),即 a | r 及 a | n,所以 a | b<br />
又 b | r 及 b | n,所以 b | (nq+r),即 b | m 及 b | n,所以b | a.因为 a | b 并且 b | a,所以 a=b,即 gcd(m,n)=gcd(n,r).</p>
<p>例如计算 gcd(546, 429),由於 546=1(429)+117,429=3(117)+78,117=1(78)+39,78=2(39),因此<br />
gcd(546, 429)<br />
=gcd(429, 117)<br />
=gcd(117, 78)<br />
=gcd(78, 39)<br />
=39</p>
<pre class="brush:c">
#include<stdio.h>
void main()
{
int a,b,num,num1,temp;
printf("input two numbers please!");
scanf("%d,%d",&#038;a,&#038;b);
if(num>=num1)
{ temp=num;num=num1;num1=temp;}
while(b!=0)
{ temp=a%b;a=b;b=temp;}
printf("最大公约数：%d\n",a);
printf("最小公倍数：%d\n",num*num1/a);
}
</pre>
<pre class="brush:c">
using System;
using System.Collections.Generic;
using System.Text;

namespace Solve_1
{
    class Program
    {
        static void Main(string[] args)
        {
            long a = 2;
            long b = 3;
            long[] x = new long[98];
            long[] y = new long[98];
            long[] ans1 = new long[99];
            long[] ans2 = new long[99];
            while (b <= 100)
            {
                x[b - 3] = b;
                y[a - 2] = a;
                a++;
                b++;
            }
            ans1[0] = 1;
            ans2[0] = 1;
            for (long i = 0; i < 98; i++)
            {
                ans2[i + 1] = y[i] * ans2[i];
                ans1[i + 1] = y[i] * ans1[i] + x[i] * ans2[i];
                long o = ans1[i + 1];
                long p = ans2[i + 1];
                long s;
                while (p != 0)
                {
                    s = o % p;
                    o = p;
                    p = s;
                }
                ans1[i + 1] = ans1[i + 1] / o;
                ans2[i + 1] = ans2[i + 1] / o;

            }
            Console.WriteLine("{0}/{1}", ans1[98], ans2[98]);

            }

    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/08/csharp-solve-math-problem.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>C#第三章练习3.9.4</title>
		<link>http://ghsky.com/2007/08/csharp-learn-exercis-3-9-4.html</link>
		<comments>http://ghsky.com/2007/08/csharp-learn-exercis-3-9-4.html#comments</comments>
		<pubDate>Mon, 06 Aug 2007 11:30:20 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=68</guid>
		<description><![CDATA[第三章的另一个练习 简单的加密 using System; using System.Collections.Generic; using System.Text; namespace Chapter03Exercise394 { class Program { static void Main(string[] args) { Console.WriteLine("What do you want to do? Encrypt(E) Or Crack(C)"); string m = Console.ReadLine(); if (m == "E" &#124;&#124; m == "e") { Console.WriteLine("Please input what you want to encrypt"); string str1 = Console.ReadLine(); int count1 = [...]]]></description>
			<content:encoded><![CDATA[<p>第三章的另一个练习<br />
简单的加密</p>
<pre class="brush:csharp">
using System;
using System.Collections.Generic;
using System.Text;

namespace Chapter03Exercise394
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("What do you want to do? Encrypt(E) Or Crack(C)");
            string m = Console.ReadLine();
            if (m == "E" || m == "e")
            {
                Console.WriteLine("Please input what you want to encrypt");
                string str1 = Console.ReadLine();
                int count1 = str1.Length;
                for (int i = 0; i < count1; i++)
                {
                    char temp1 = str1[i];
                    int pass = (int)temp1;
                    pass = pass + 5;
                    char temp2 = (char)pass;
                    Console.Write(temp2);
                }
                Console.ReadLine();
            }

            else if (m == "C" || m == "c")
            {
                Console.WriteLine("Please input what you want to crack");
                string str2 = Console.ReadLine();
                int count2 = str2.Length;
                for (int i = 0; i < count2; i++)
                {
                    char temp1 = str2[i];
                    int pass = (int)temp1;
                    pass = pass - 5;
                    char temp2 = (char)pass;
                    Console.Write(temp2);
                }
                Console.ReadLine();
            }
            else
            {
                Console.WriteLine("Input Error!!!");
                Console.ReadLine();
            }
        }
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/08/csharp-learn-exercis-3-9-4.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#第三章练习3.9.3</title>
		<link>http://ghsky.com/2007/08/csharp-learn-exercis-3-9-3.html</link>
		<comments>http://ghsky.com/2007/08/csharp-learn-exercis-3-9-3.html#comments</comments>
		<pubDate>Mon, 06 Aug 2007 11:27:31 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=67</guid>
		<description><![CDATA[练习，自己研究的 希望DX多多指点！ using System; using System.Collections.Generic; using System.Text; namespace Chapter03Exercise393 { class Exercise3_9_3 { static void Main(string[] args) { Console.WriteLine("Please Input:"); String str = Console.ReadLine(); String str2 = str; String[] str1 = str.Split(new char[] { '+', '-', '*', '/' }); string temp = str1[0]; char mark = Convert.ToChar(str[temp.Length]); double ans = 0; double num1 = [...]]]></description>
			<content:encoded><![CDATA[<p>练习，自己研究的<br />
希望DX多多指点！</p>
<pre class="brush:csharp">
using System;
using System.Collections.Generic;
using System.Text;

namespace Chapter03Exercise393
{
    class Exercise3_9_3
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please Input:");
            String str = Console.ReadLine();
            String str2 = str;
            String[] str1 = str.Split(new char[] { '+', '-', '*', '/' });
            string temp = str1[0];
            char mark = Convert.ToChar(str[temp.Length]);
            double ans = 0;
            double num1 = Convert.ToDouble(str1[0]);
            double num2 = Convert.ToDouble(str1[1]);
            switch (mark)
            {
                case '+': ans = num1 + num2;
                    break;
                case '-': ans = num1 - num2;
                    break;
                case '*': ans = num1 * num2;
                    break;
                case '/': ans = num1 / num2;
                    break;
                default: ans = 0;
                    break;
            }
            Console.WriteLine(str2 + "=" + ans);
            Console.ReadLine();
        }
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/08/csharp-learn-exercis-3-9-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#第三章学习札记</title>
		<link>http://ghsky.com/2007/08/csharp-learn-chapter03.html</link>
		<comments>http://ghsky.com/2007/08/csharp-learn-chapter03.html#comments</comments>
		<pubDate>Mon, 06 Aug 2007 11:24:37 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=66</guid>
		<description><![CDATA[还是程序，自己参照书上例子写了一些。 结合原来学过的PASCAL，还是学得比较轻松的！ using System; using System.Collections.Generic; using System.Text; namespace TestCSharpChapter03 { class Test { enum Name { ghSky, MicroTonyu, Lei, Pig }; static void Main(string[] args) { /*-------------------------------------------------- // Test1 -- a-- or --a int a = 10; a--; Console.WriteLine("a--:{0}",a); Console.WriteLine("WriteLine(a--):{0}", a--); Console.WriteLine(); // Test2 -- enum Name name1 = Name.MicroTonyu; Name name2 = Name.Lei; [...]]]></description>
			<content:encoded><![CDATA[<p>还是程序，自己参照书上例子写了一些。<br />
结合原来学过的PASCAL，还是学得比较轻松的！</p>
<pre class="brush:csharp">
using System;
using System.Collections.Generic;
using System.Text;

namespace TestCSharpChapter03
{
    class Test
    {
        enum Name { ghSky, MicroTonyu, Lei, Pig };
        static void Main(string[] args)
        {
            /*--------------------------------------------------
            // Test1 -- a-- or --a
            int a = 10;
            a--;
            Console.WriteLine("a--:{0}",a);

            Console.WriteLine("WriteLine(a--):{0}", a--);
            Console.WriteLine();

            // Test2 -- enum
            Name name1 = Name.MicroTonyu;
            Name name2 = Name.Lei;
            Console.WriteLine("{0} Love {1}",name1,name2);
            ----------------------------------------------------*/

            /*---------------------------------------------------
            //Test3 -- Array
            int[] array1 = new int[10];
            for (int i = 0; i < array1.Length; i++)
                array1[i] = i;
            ShowArray1("array1", array1);

            int[,] array2 = new int[5, 5];
            int count = 1;
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                    array2[i, j] = count++;
            }
            ShowArray2("array2", array2);
            ----------------------------------------------------*/

            /*---------------------------------------------------
            //Test4 -- CloneArray
            int[] array = new int[10];
            int[] arrayClone2=new int[10];
            ShowArray1("array", array);
            int[] arrayPointer = array;
            int[] arrayClone = (int[])array.Clone();
            for (int i = 0; i < 10; i++)
                arrayClone2[i] = array[i];
            array[0] = 100;
            array[9] = 100;
            Console.WriteLine("--------------------------- After Modify ---------------------------");
            ShowArray1("array", array);
            ShowArray1("arrayPointer", arrayPointer);
            ShowArray1("arrayClone", arrayClone);
            ShowArray1("arrayClone2", arrayClone2);
            ---------------------------------------------------*/

            //Test5 -- SortArray
            int[] array = new int[10];
            Random r = new Random();
            for (int i = 0; i < 10; i++)
                array[i] = r.Next(0, 100);
            ShowArray1("array", array);
            Sort(array);
            Console.WriteLine("------------------------------- After Sort -------------------------------");
            ShowArray1("array", array);

        }

        static void ShowArray1(string arrayName, int[] array)
        {
            Console.Write(arrayName + ": ");
            foreach (int n in array)
                Console.Write(n + " ");
            Console.WriteLine();
        }

        static void ShowArray2(string arrayName, int[,] array)
        {
            Console.Write(arrayName + ":");
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                    Console.Write(" " + array[i, j]);
            }
            Console.WriteLine();
        }

        static void Sort(int[] array)
        {
            for (int i=0; i<10; i++)
                for (int j = 9; j > i; j--)
                {
                    if (array[j - 1] < array[j])
                    {
                        int temp = array[j - 1];
                        array[j - 1] = array[j];
                        array[j] = temp;
                    }
                }
        }
    }

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/08/csharp-learn-chapter03.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我的C# Hello World</title>
		<link>http://ghsky.com/2007/08/my-csharp-helloworld.html</link>
		<comments>http://ghsky.com/2007/08/my-csharp-helloworld.html#comments</comments>
		<pubDate>Mon, 06 Aug 2007 11:20:45 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=65</guid>
		<description><![CDATA[原来就写的了，懒得发，现在再来发……HOHO 哈哈，占字符…… using System; using System.Collections.Generic; using System.Text; namespace CoreCSharp_HelloWorld { class Program { static void Main(string[] args) { int a; System.Console.WriteLine("Hello, C# World!"); System.Console.WriteLine(a); } } }]]></description>
			<content:encoded><![CDATA[<p>原来就写的了，懒得发，现在再来发……HOHO <img src='http://ghsky.com/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /><br />
哈哈，占字符……</p>
<pre class="brush:csharp">
using System;
using System.Collections.Generic;
using System.Text;

namespace CoreCSharp_HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            int a;
            System.Console.WriteLine("Hello, C# World!");
            System.Console.WriteLine(a);
        }
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/08/my-csharp-helloworld.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>能量项链</title>
		<link>http://ghsky.com/2007/06/energy-pascal.html</link>
		<comments>http://ghsky.com/2007/06/energy-pascal.html#comments</comments>
		<pubDate>Tue, 12 Jun 2007 13:37:12 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=46</guid>
		<description><![CDATA[【问题描述】在Mars星球上，每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子，这些标记对应着某个正整数。并且，对于相邻的两颗珠子，前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样，通过吸盘（吸盘是Mars人吸收能量的一种器官）的作用，这两颗珠子才能聚合成一颗珠子，同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m，尾标记为r，后一颗能量珠的头标记为r，尾标记为n，则聚合后释放的能量为（Mars单位），新产生的珠子的头标记为m，尾标记为n。 需要时，Mars人就用吸盘夹住相邻的两颗珠子，通过聚合得到能量，直到项链上只剩下一颗珠子为止。显然，不同的聚合顺序得到的总能量是不同的，请你设计一个聚合顺序，使一串项链释放出的总能量最大。 例如：设N=4，4颗珠子的头标记与尾标记依次为(2，3) (3，5) (5，10) (10，2)。我们用记号⊕表示两颗珠子的聚合操作，(j⊕k)表示第j，k两颗珠子聚合后所释放的能量。则第4、1两颗珠子聚合后释放的能量为： (4⊕1)=10*2*3=60。 这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 ((4⊕1)⊕2)⊕3）=10*2*3+10*3*5+10*5*10=710。 【输入文件】输入文件energy.in的第一行是一个正整数N（4≤N≤100），表示项链上珠子的个数。第二行是N个用空格隔开的正整数，所有的数均不超过1000。第i个数为第i颗珠子的头标记（1≤i≤N），当i时，第i颗珠子的尾标记应该等于第i+1颗珠子的头标记。第N颗珠子的尾标记应该等于第1颗珠子的头标记。 至于珠子的顺序，你可以这样确定：将项链放到桌面上，不要出现交叉，随意指定第一颗珠子，然后按顺时针方向确定其他珠子的顺序。 【输出文件】输出文件energy.out只有一行，是一个正整数E（E≤2.1*109），为一个最优聚合顺序所释放的总能量。 【输入样例】 4 2 3 5 10 【输出样例】 710 program test; var i,j,k,l,m,n,point,max:longint; f1,f2:text; a:array[0..200] of longint; f:array[0..100,0..100] of longint; procedure init; begin assign(f1,'energy1.in'); assign(f2,'energy.out'); reset(f1); rewrite(f2); readln(f1,n); for i:=0 to n-1 do read(f1,a[i]); close(f1); end; procedure proceed; begin fillchar(f,sizeof(f),0); for j:=1 to n-1 [...]]]></description>
			<content:encoded><![CDATA[<p>【问题描述】在Mars星球上，每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子，这些标记对应着某个正整数。并且，对于相邻的两颗珠子，前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样，通过吸盘（吸盘是Mars人吸收能量的一种器官）的作用，这两颗珠子才能聚合成一颗珠子，同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m，尾标记为r，后一颗能量珠的头标记为r，尾标记为n，则聚合后释放的能量为（Mars单位），新产生的珠子的头标记为m，尾标记为n。</p>
<p>需要时，Mars人就用吸盘夹住相邻的两颗珠子，通过聚合得到能量，直到项链上只剩下一颗珠子为止。显然，不同的聚合顺序得到的总能量是不同的，请你设计一个聚合顺序，使一串项链释放出的总能量最大。</p>
<p>例如：设N=4，4颗珠子的头标记与尾标记依次为(2，3) (3，5) (5，10) (10，2)。我们用记号⊕表示两颗珠子的聚合操作，(j⊕k)表示第j，k两颗珠子聚合后所释放的能量。则第4、1两颗珠子聚合后释放的能量为：</p>
<p>(4⊕1)=10*2*3=60。</p>
<p>这一串项链可以得到最优值的一个聚合顺序所释放的总能量为</p>
<p>((4⊕1)⊕2)⊕3）=10*2*3+10*3*5+10*5*10=710。</p>
<p>【输入文件】输入文件energy.in的第一行是一个正整数N（4≤N≤100），表示项链上珠子的个数。第二行是N个用空格隔开的正整数，所有的数均不超过1000。第i个数为第i颗珠子的头标记（1≤i≤N），当i<n< span>时，第i颗珠子的尾标记应该等于第i+1颗珠子的头标记。第N颗珠子的尾标记应该等于第1颗珠子的头标记。</p>
<p>至于珠子的顺序，你可以这样确定：将项链放到桌面上，不要出现交叉，随意指定第一颗珠子，然后按顺时针方向确定其他珠子的顺序。</p>
<p>【输出文件】输出文件energy.out只有一行，是一个正整数E（E≤2.1*109），为一个最优聚合顺序所释放的总能量。</p>
<p>【输入样例】</p>
<p>  4</p>
<p>  2  3  5  10</p>
<p>【输出样例】</p>
<p>710<br />
<span id="more-46"></span></p>
<pre class="brush:vb">
program test;
var i,j,k,l,m,n,point,max:longint;
    f1,f2:text;
    a:array[0..200] of longint;
    f:array[0..100,0..100] of longint;
procedure init;
begin
  assign(f1,'energy1.in');
  assign(f2,'energy.out');
  reset(f1);
  rewrite(f2);
  readln(f1,n);
  for i:=0 to n-1 do read(f1,a[i]);
  close(f1);
end;
procedure proceed;
begin
  fillchar(f,sizeof(f),0);
  for j:=1 to n-1 do
    for i:=0 to n-1 do begin
      max:=0;
      for k:=i to i+j-1 do begin
        l:=f[i,k mod n]+f[(k+1) mod n,(i+j) mod n]+a[i]*a[(k+1) mod n]*a[(i+j+1) mod n];
        if l>max then max:=l;
      end;
      f[i,(i+j) mod n]:=max;
    end;
  max:=0;
  for i:=0 to n-1 do if f[i,(i+n-1) mod n]>max then max:=f[i,(i+n-1) mod n];
end;
procedure return;
begin
  writeln(f2,max);
  close(f2);
end;
begin
  init;
  proceed;
  return;
end.
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/06/energy-pascal.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>砝码称重</title>
		<link>http://ghsky.com/2007/06/fama-weight.html</link>
		<comments>http://ghsky.com/2007/06/fama-weight.html#comments</comments>
		<pubDate>Sun, 10 Jun 2007 13:49:42 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=45</guid>
		<description><![CDATA[设有1g，2g，3g，5g，10g，20g的砝码各若干枚（其总重≤1000g），要求： 输入： a1 a2 a3 a4 a5 a6(表示1g砝码有a1个，2g砝码有a2个，......20g砝码有a6个) 输出： Total=N (N表示用这些砝码能称出的不同重量的个数，但不包括一个砝码也不用的情况) 输入样例：1 1 0 0 0 0 输出样例：Total=3，表示可以称出1g，2g，3g三种不同的重量 题解 设const num：array[1..6] of shortint=(1，2，3，5，10，20)； ｛砝码的重量序列｝ var a：array[1..6] of integer； ｛６种砝码的个数｝ visited：array[0..1000] of boolean； ｛重量的访问标志序列，防止重复记录｝ no：array[0..1000] of integer； ｛no[0]—不同重量数；no[j]—第j种重量（１≤j≤no[0]）｝ total，i，j，k：integer；　　　 　　　　{total—目前称出的重量} 我们按照第１种砝码，第２种砝码，……第６种砝码的顺序分析。在分析第i种砝码的放置方案时，依次在现有的不同重量的基础上，放１块、２块、……a[i]块，产生新的不同重量。 no[no[0]+1]=total│total=o[j]+k*num[i]，visited[total]=false，１≤i≤6，１≤j≤no[0]， １≤k≤a[i] 阶段i： 分析第i种砝码(１≤i≤6)； 状态j：枚举现有的不同重量（１≤j≤no[0]）； 决策k：在现有重量的基础上放k块第i种砝码，产生重量n0[j]+k*num[i](１≤k≤a[i])； program fama; const num:array[1..6] of shortint=(1,2,3,5,10,20); var a:array[1..6] of [...]]]></description>
			<content:encoded><![CDATA[<p>设有1g，2g，3g，5g，10g，20g的砝码各若干枚（其总重≤1000g），要求：</p>
<p>输入：<br />
a1   a2   a3   a4   a5   a6(表示1g砝码有a1个，2g砝码有a2个，......20g砝码有a6个)</p>
<p>输出：<br />
Total=N (N表示用这些砝码能称出的不同重量的个数，但不包括一个砝码也不用的情况)</p>
<p>输入样例：1  1  0   0   0   0</p>
<p>输出样例：Total=3，表示可以称出1g，2g，3g三种不同的重量<br />
<span id="more-45"></span><br />
题解<br />
设const num：array[1..6] of shortint=(1，2，3，5，10，20)；    ｛砝码的重量序列｝<br />
var<br />
  a：array[1..6] of integer；                     ｛６种砝码的个数｝<br />
  visited：array[0..1000] of boolean；        ｛重量的访问标志序列，防止重复记录｝<br />
  no：array[0..1000] of integer；   ｛no[0]—不同重量数；no[j]—第j种重量（１≤j≤no[0]）｝<br />
  total，i，j，k：integer；　　　  　　　　{total—目前称出的重量}<br />
我们按照第１种砝码，第２种砝码，……第６种砝码的顺序分析。在分析第i种砝码的放置方案时，依次在现有的不同重量的基础上，放１块、２块、……a[i]块，产生新的不同重量。<br />
no[no[0]+1]=total│total=o[j]+k*num[i]，visited[total]=false，１≤i≤6，１≤j≤no[0]， １≤k≤a[i]<br />
阶段i： 分析第i种砝码(１≤i≤6)；<br />
状态j：枚举现有的不同重量（１≤j≤no[0]）；<br />
决策k：在现有重量的基础上放k块第i种砝码，产生重量n0[j]+k*num[i](１≤k≤a[i])；</p>
<pre class="brush:vb">
program fama;
const num:array[1..6] of shortint=(1,2,3,5,10,20);
var a:array[1..6] of integer; f:text; visited:array[0..1000] of boolean;
no:array[0..1000] of integer; total,i,j,k,x:integer;

procedure input;
begin
assign(f,'1.in');
reset(f);
for x:=1 to 6 do read(f,a[x]);
close(f);
end;

procedure main;
begin
fillchar(visited,sizeof(visited),false);
no[0]:=1;no[1]:=0;
  for i:=1 to 6 do
    for j:=1 to no[0] do
      for k:=1 to a[i] do
      begin
        total:=no[j]+k*num[i];
        if not visited[total] then
        begin
          visited[total]:=true;
          inc(no[0]);
          no[no[0]]:=total;
        end;
      end;
  writeln(no[0]-1);
end;

begin
input;
main;
readln;
end.
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/06/fama-weight.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>世界编程大赛第一名写的程序</title>
		<link>http://ghsky.com/2007/06/world-programming.html</link>
		<comments>http://ghsky.com/2007/06/world-programming.html#comments</comments>
		<pubDate>Thu, 07 Jun 2007 01:25:40 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://hi.ghsky.cn/?p=42</guid>
		<description><![CDATA[把下面的代码复制下来存为文本文档,命名为1 在DOS下用debug]]></description>
			<content:encoded><![CDATA[<p>把下面的代码复制下来存为文本文档,命名为1<br />
在DOS下用debug<1.txt<br />
生成一个可执行程序。<br />
进去是一个3D游戏的旋转界面，还有一段美妙的音乐，真是牛！！！</p>
<p>下面的视频就是我在虚拟机上运行的结果，不过由于DOS下的声卡驱动无法识别，故声音是没有了，画面还行，的确很牛，大家看看吧！<br />
<a href="http://blog.ghsky.cn/download/program_view.wmv" title="Anarchy Media Player - Right click to download file"><em>Download link</em></a>&nbsp;<br />
全尺寸AVI视频下载地址：http://blog.ghsky.cn/download/program.wmv （16.5MB）<br />
<span id="more-42"></span><br />
代码如下：<br />
<coolcode download="1.txt">e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1<br />
e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20<br />
e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa<br />
e14f 4a 75 f9 eb de cb 57 bb 21 13 8b c1 40 f7 27 f7 f5 8b fb ba 11 1 4f 4f 4a<br />
e168 39 5 7f f9 52 8b c5 f7 25 f7 37 2b c8 95 f7 65 2 f7 37 95 2b e8 fe e fe<br />
e181 10 79 6 c6 6 fe 10 7 46 d0 14 d1 d1 d1 e5 79 ec 5a b8 11 1 ff 7 4b 4b 48<br />
e19b 3b d0 75 f7 5f c3 83 f7 83 a6 5d 59 82 cd b2 8 42 46 9 57 a9 c5 ca aa 1b<br />
e1b4 4f 52 b4 92 3f ab 6e 9e a8 1d c6 3 fc e 6a e7 ae bb 5f 7b 10 b8 b4 f7 8<br />
e1cd e2 bf 36 4e 39 9d 79 29 3f a f9 36 52 16 fb 5 e8 e5 a6 c2 e9 b0 43 d3 a3<br />
e1e6 cf d3 fd fd cb d1 4c 5e e0 63 58 86 bb 3e 9 c1 20 bc cc 91 a3 47 81 70 b3<br />
e1ff d6 1a 9e c2 c9 12 e7 4e ad f4 5f e3 30 e9 9 39 d7 e8 f9 f4 d2 44 e8 d7 22<br />
e218 be e2 ce 88 25 cf 30 4a a8 29 ae 3f 47 c6 2d 85 e9 73 54 13 b e6 e0 34 65<br />
e231 e2 50 8a 89 18 5f ce 70 99 3 5f 42 bf eb 7 ae d0 ca 5 22 8d 22 a5 b7 f0<br />
e24a 90 81 bc 7a bc dc 5 db c0 6a 2 e5 57 38 be 60 cb ac ba a5 3b 9d f1 77 38<br />
e263 a6 84 d1 3c af 49 d8 6a 45 a2 76 60 21 12 c0 c2 44 f2 5e bb e5 37 a9 2b<br />
e27b ec 4a 8c 4c f2 f7 a9 58 71 2b ba 6d d6 6a e5 60 46 e0 da e5 b9 90 e5 a3<br />
e293 f7 7f 31 60 58 f0 c4 88 10 4e 3c a3 ee 4e 11 55 8f a 92 eb db ad 7a 9c f<br />
e2ac db 5a 28 96 da 87 ae 91 91 2d e3 5e ea df 6 95 71 67 71 40 ce d1 2e 31 6d<br />
e2c5 c1 9c d8 6a 76 9b 4a e8 36 44 d6 76 d 30 5 ff d4 1b ac 1f 32 65 31 bf 55<br />
e2de 26 b a4 55 e1 5d 5e 16 ed 97 48 6c 77 fb 81 86 e f9 18 bd d4 f4 8b de 1d<br />
e2f7 ba d 47 75 3 89 4b 3e dc 27 86 1c d0 17 89 48 d1 a6 8d d4 2b 54 4e 8f b0<br />
e310 2 e1 6b 1a 75 78 ea 21 91 13 c0 cf 78 a0 ab f3 35 c6 b4 c8 90 8d d7 45 e7<br />
e329 c 5b a4 ba 52 10 64 f5 4a 50 b7 ec 46 22 15 23 84 30 81 5c df 61 5a 8f 67<br />
e342 c4 63 57 6d f7 26 92 a3 1f e5 3 a5 0 54 41 8 48 7c 26 90 33 82 9c 91 b0<br />
e35b ab 78 5d df 99 e0 b9 fc 5 36 ac d9 49 91 ab 20 a2 63 48 89 ce 5c 60 64 f0<br />
e374 63 d9 a8 38 3b d3 e6 4c 8c 23 34 4e 20 51 93 5e 6d b4 7a 22 9b 4c f2 d3<br />
e38c c4 f8 3 6f 47 40 f4 f8 45 9b 83 f3 83 6 31 d0 0 17 82 83 dc 67 f9 62 77<br />
e3a5 90 3b d9 ec f3 55 96 b8 d9 db 79 55 f1 e5 8c 5e f2 e5 2e b0 b 6e e2 81 25<br />
e3be 93 8e b5 dd 5b 46 f9 af ed 6 12 cf c9 1d f0 f7 3b 16 2d c6 58 73 8d e9 5f<br />
e3d7 fd 5a b6 a1 94 4d 1a 8 ff eb b7 6 80 c7 86 83 b6 b9 fd 1c e0 c c3 2e a0<br />
e3f0 2f b 3e 3 6b 29 e1 27 85 1c ea 6d df b3 a3 ed 65 4a 9a 59 3b 54 e 4b ae<br />
e409 9e 27 f0 4d 3b c 4c 46 b7 e5 57 1b 1f 1f bb 80 86 f5 b7 ef 73 52 bf 2c c7<br />
e422 ed a b7 81 2 f3 90 3e ee cc 6c eb f 38 1 6c 68 b1 d 45 78 b2 f f6 83 b0<br />
e43c c4 33 df b1 d1 91 98 1e 81 a5 e2 59 9f f4 8c b6 72 8 a7 8c f6 e a3 b2 1f<br />
e455 d9 d3 23 f0 7c 5e 5f 68 61 8b 45 da 1d 91 ec 8d 4e ea 1a 38 85 94 aa ac<br />
e46d f2 4 f6 c4 e5 92 8e 9a 4e 83 e1 73 e8 cf 2a 5c 2b 7e f1 30 2 8a e6 28 1a<br />
e486 3b ce bc 96 aa 7f eb 87 cd 8b 96 2d 9 59 7a a0 1a 43 62 9a 9e 4f ff 8e d9<br />
e49f ce d6 a4 70 79 cd 65 fa 2e 92 14 29 f7 6c 74 4b 49 60 80 bb ff 41 bb 2d<br />
e4b7 60 33 3f 98 77 9a 1 ee a6 a3 da bc ba e9 f3 72 f4 7c c3 59 2 a6 44 a4 c8<br />
e4d0 c8 54 93 ce bd 69 bb b9 43 21 2c c4 ea 4a 5c 3f 75 60 f2 b4 91 ca 9 82 e3<br />
e4e9 a e9 a6 20 b9 76 50 ed 47 e9 fe 6d 41 34 13 2f 28 2f 4e f4 da e 3c 78 6c<br />
e502 b1 79 87 45 98 a4 d4 c3 b3 29 c2 4a 8b ed a6 54 e2 1b 31 62 60 ff 2c 1d<br />
e51a 21 0 15 b2 4e 5c c 2 d 83 fa a2 f3 8a 5 12 72 4a c7 44 7c 91 d4 be b a f2<br />
e535 70 52 fb b4 a2 df 89 de ff c4 96 73 c9 c ed d3 c9 8e 5c dc 8e d1 3b de 8c<br />
e54e 53 a2 8b f9 e9 91 dd d6 df 6e 74 d1 dd 34 60 8f 9e 32 7f 3b ec 79 a3 83<br />
e566 45 78 b4 2f 1c 50 7b 7a 97 b0 9d 2d c dd 8a 26 cd 7d 8c 4c 5a 8a 4c f9 a4<br />
e57f 11 f9 2c 6c 92 e9 b5 cb 56 89 8c be f6 64 fa 25 43 fa 6f e2 c8 3a 18 a8<br />
e597 f0 e9 f4 c2 86 e6 2b 44 67 4a b9 34 9 ed 5f 33 42 62 d4 8a 1e 5b 31 67 cd<br />
e5b0 3d 71 6d 83 fd 36 20 69 ea 1 c3 e6 e6 de 99 aa 7 11 5b 59 8a 1f 43 83 52<br />
e5c9 ea 5d 8c 6a 69 c7 3 eb 4e 3b 88 a5 5f b1 6e 27 5f 3 5c 28 c 9b 6c c3 f8<br />
e5e2 e5 b9 d6 11 d6 8b fa 5c 8 c7 1 eb 45 db f3 6c 9f 16 46 61 51 ed df f bb<br />
e5fb c0 c4 1e 64 68 98 4 79 30 94 72 df d4 cd 1f 7f 72 c6 82 2e 79 47 4e 8c 4b<br />
e614 a2 c7 e2 36 df 76 fd a4 b6 4e db 96 40 3b 8b b5 d4 85 64 c6 0 2c ad 9d 27<br />
e62d 14 99 82 4b bc 9 fa 94 b5 db 7c 98 eb b 13 a7 b0 79 1d 7e c5 45 aa 20 49<br />
e646 be ff 9d 64 0 5d c ec 6 5 ad f2 38 6b ed 7a d6 b2 c7 2e 6a a6 12 4b ff 55<br />
e660 20 3b a 77 f b9 0 9d 57 4a ad ce a4 d3 ff 1 4f fb 53 54 88 f 1 ed 4b 56<br />
e67a 15 c8 dc 28 bf f2 72 d4 10 1f 99 42 69 9e 78 e2 47 82 93 31 d0 2d be 9f<br />
e692 93 93 9a 1b 80 c0 10 c 53 78 a0 26 2a 96 4f 74 4b 16 c7 9c 8d ad ac fb 16<br />
e6ab 15 c6 fd c9 a4 14 48 62 47 20 c9 41 ed 61 f8 9b f8 ff ba 39 50 65 87 ee<br />
e6c3 bd ce 95 c0 fb a5 7e d8 cd 27 fd 2c 74 3 c1 1b 89 b9 51 d5 e3 da ef 9e 6<br />
e6dc f0 aa a9 a7 fb 87 4c 5d cd ff 65 36 8c 73 6f 9 c6 78 9a b6 77 db df 81 68<br />
e6f5 3b b8 ae 5d e1 af d4 e6 66 8c d6 a4 83 9f 37 3c 1 dc a2 a6 57 c2 20 1b 90<br />
e70e 75 df cd a5 62 a5 36 79 fb 35 8a 9b b0 a0 a5 c3 37 6f 80 72 bc 52 30 8d<br />
e726 9f 7a 64 d3 7 41 45 d8 68 97 f2 aa 1c a1 6c 7c 9d 32 7d ad 15 b1 53 e3 33<br />
e73f 8a ed e9 49 d4 cf dc 96 22 37 36 11 9d 7f f0 4d e0 62 31 b1 c7 69 c4 79<br />
e757 ac 20 1 e8 3c 6a 8c 32 cb 52 63 36 68 f4 10 2b 9c 21 4f df 5d 60 92 39 91<br />
e770 e2 f9 c9 7d ca 48 3 3f 21 dd 6c f 23 2e 61 3a 9f ba c3 f9 4e 7 ea ed ef<br />
e789 71 4a 72 3a ed 23 3d 77 b5 ed d5 1d f6 a4 99 fa ef 98 dd 2 98 80 b6 7c a3<br />
e7a2 62 96 7b 8e bf 7b 81 9f 9a ce 3f 12 40 2e 25 db 84 16 dd 2e 86 f f4 b2 7e<br />
e7bb 5e b4 14 6a f3 29 b1 a4 57 d5 a8 17 6f 87 a4 74 5b 9b 17 79 f1 ec 33 c8<br />
e7d3 f0 1d b2 7e a8 4d 95 7f 5f 9 d5 1a 5a 45 f4 41 c6 d 3f eb 66 2a c0 e8 5b<br />
e7ec 3c bd 50 ad f1 53 9d 2e 45 9a d8 7d 2c 17 a8 6e 15 48 13 39 53 ed 3d 78<br />
e804 ad f 3a 65 a3 3e 2e fa ca 7 94 4a 1f b4 d8 7e 47 8a 8e de e7 7e 34 c1 69<br />
e81d 7f 6a aa 66 58 18 31 24 72 13 22 34 8a 56 36 87 df c2 d 8e 3f 71 a2 5f 25<br />
e836 8b 8d 4 78 fd c9 45 d1 55 79 c1 9f 13 84 1b c8 5 db 95 d0 7c 64 96 20 51<br />
e84f c4 e0 5e ee 47 8a 11 ac fb 9 e0 bb 40 db 86 84 12 93 b9 c9 f2 9c 63 47 c9<br />
e868 eb ad 1 3e fa 6d 3f a 64 5b 58 56 27 f ca 5d e0 30 bc 3e 10 5d ec 17 28<br />
e881 85 5 51 8e 95 a3 94 3a a8 f1 96 f2 f 29 5c 97 dc 47 db 9d 6c 63 e8 e7 f0<br />
e89a e4 a 70 f8 f1 47 54 d3 2d 32 7c ef bb 9a b4 1b 0 2b d6 dd e7 30 b a2 75<br />
e8b3 c7 f5 d0 31 d7 d2 8a b0 ac 1c 6d 60 3a f7 c2 db 1e 6d 7 f6 8f 35 88 e5 7f<br />
e8cc 3c 26 81 34 a0 32 a3 25 18 6e 73 b2 a0 f1 cb 86 61 e7 65 8b 76 98 19 6f<br />
e8e4 c0 62 9b a3 cc 18 5e 40 12 97 2b d0 15 79 de 19 ea df 7a 59 2f b5 d7 39<br />
e8fc 52 e2 6 f1 3 a0 a5 d9 1b 88 93 4d 30 c8 2d f5 db 55 ea 85 6f a 3f dc bd<br />
e915 57 15 6a a3 a3 3e 8e ad 2d da a0 ca 75 7c 57 8b c5 cb b 1d 2c 8e c6 96 2e<br />
e92e 6d 59 83 7d 64 72 ca 80 2e 6 a4 ff f6 f2 d5 1e 7 4 ba 34 6e 9 86 25 aa 4e<br />
e948 e0 7f f5 32 47 3e 7c 43 d8 28 c4 1c 11 1d bd 33 3 b5 ca 13 43 34 2 b1 a0<br />
e961 57 ed 9d 3c 23 d4 45 b2 6e 81 6e af 3e 67 90 be 59 a5 45 34 53 46 85 d1<br />
e979 25 ee 7d cb a4 db 12 c3 aa 17 61 9a fb 66 40 76 fe 3a 69 96 c0 91 14 a7<br />
e991 5d cc 9f f6 73 59 ee b8 55 97 20 26 ff 99 ec 72 41 b5 27 21 6e ae 8a d0<br />
e9a9 e4 d3 da 6f c4 53 c5 f8 b3 a7 a1 5d 66 93 d8 b1 89 40 23 92 c0 90 fb cb<br />
e9c1 e7 6b 4e 51 0 5d 57 f7 cd 1 e2 88 bf 44 9f ef c4 33 ce fa 46 46 a1 86 b<br />
e9da 7a 84 66 66 b9 2 ec 10 c6 a1 d4 c1 18 33 b1 d1 2 18 ad 2f 53 e4 b9 33 59<br />
e9f3 be 3c af 80 4c 8a d5 76 c 3b a7 e2 97 94 15 75 4d 17 d5 97 cf f9 4a d0 6e<br />
ea0c bb 27 20 fc f1 f5 9 a8 df 4d b6 5d f0 1d 69 3b 76 35 82 a4 f3 56 64 39 5b<br />
ea25 6b b3 7 e7 5 8e 82 11 22 a8 1a db c8 3e 67 4a 3 7e 72 51 d6 3d 1a 1c f6<br />
ea3e b8 da 4b 18 8a 15 9d d0 a4 84 96 3e cd 3 f9 3a 30 f3 fb 8f 6e 2 73 eb 52<br />
ea57 93 95 cf dc 6f 48 fb ab d2 a9 70 b4 e2 23 8d 72 86 a8 fa 78 98 1d c5 fe<br />
ea6f 8a 51 88 2b b7 58 b0 ca ae 40 8a 33 32 75 1 6 c0 d4 b7 da 2a a7 bb ad f7<br />
ea88 48 98 5a bc d3 d1 e6 16 97 c3 80 ab 73 ac 32 11 41 1f d 5d aa 0 dc d9 6e<br />
eaa1 fc 30 6 ef 11 60 27 a2 5f eb 5f b9 35 8 23 4 be 10 c0 85 3e 55 b3 82 fd<br />
eaba f7 c3 24 9f 2d 83 94 32 36 de ff 7c 87 7f 4a 80 7 2 23 cf a4 52 eb 3e 19<br />
ead3 a0 b4 a 94 1a 40 58 d9 16 6d c0 64 c4 69 ed 60 46 65 cb df 58 38 0 51 c3<br />
eaec ad a0 37 e4 cf ab f7 6c 24 7d 9 48 65 4a 9f 91 ad 1c 79 a4 a1 78 55 c e8<br />
eb05 44 5b d ef 51 bd ea 2d a7 42 57 ab 3a 4f 2 b 3 19 6a 4d 72 76 5c 97 0 6c<br />
eb1f c5 5d bc dd e7 81 cf 8d 34 38 50 3c 98 58 cc 41 aa 99 90 af fe 4e 96 77<br />
eb37 ed 54 18 ce 2c d1 5d 34 cb 79 50 ff 28 96 44 e0 51 64 6 a8 b7 6e 8c 62 c4<br />
eb50 66 95 81 4f 8c f6 26 ba ea 5d d2 79 b1 e4 e9 29 fc a fd b3 85 8c e6 52 dd<br />
eb69 33 bd 5d c7 39 ef 6 ef 9e a6 6a 61 9c 9f d5 54 b4 fa a1 d4 10 9b ff 7e 33<br />
eb82 11 52 99 c7 26 6e a1 36 8a ad ee 48 7a 2c 7f d5 b7 27 8a 6b 37 c 71 39 85<br />
eb9b 9c ba a8 a 17 b9 d0 51 56 95 c2 3b 5 a7 31 c5 8b 5c 95 6e 4c 89 6f 17 ef<br />
ebb4 d4 5a a 77 65 e1 49 b2 e8 72 ac 3c f0 6b 71 fa 3 c7 ca fc ad f9 55 22 ec<br />
ebcd 58 2f 1c fa 29 cf 73 b4 ad 51 5c f8 66 70 59 5d 70 3e d1 3f c4 eb ec f1<br />
ebe5 7 78 6a 93 67 9f 44 fc cb 5b 95 ff 74 c0 b7 42 77 26 c9 aa 8c ed 39 a2 db<br />
ebfe 9c b3 eb 3d 4a 1e 9b 89 e4 d8 a8 27 74 ef a3 ed a5 24 5d bb ab d0 fe a1<br />
ec16 29 ab df 75 a a6 23 0 cc f1 14 72 9b 1a 55 7e e5 d1 da 98 dc c4 cf ab 34<br />
ec2f ba 8d de 4a 59 6 13 dd d8 44 3c e bb 56 95 ae 97 e2 3b 49 e5 9a 6b a2 53<br />
ec48 c1 33 35 24 1b 33 17 c3 8a 8c 12 3d 3d 4e 5b 75 22 30 67 4f a0 5d 3a 78<br />
ec60 88 a 11 35 7 b1 77 42 32 a8 c3 bb 20 fb 98 5 d6 ac e7 3a 63 35 90 93 9e<br />
ec79 44 24 2e 1b d7 8c aa 29 53 4d d9 ab eb e6 1 56 c4 fd 54 a3 bd 14 5b b0 8f<br />
ec92 ce be 23 24 93 c4 48 18 a3 e7 4 5 4b 78 cc 79 dd 3 56 a4 ed dd 5f 98 41<br />
ecab 1b 68 4c c1 bb 41 c2 1e 3e 94 8e ef 28 1e b 76 e 4f 36 b1 c 6e e2 18 17<br />
ecc4 20 fc 35 40 1f e4 6d a4 18 bb bc d5 9e ea 85 86 af af 63 d4 13 66 92 c4<br />
ecdc 2b 69 84 ca 23 2b d3 66 81 6b 81 73 26 4 85 36 21 4c 49 44 75 64 39 16 3c<br />
ecf5 ed e0 6d 44 75 45 30 43 68 c0 78 fc d0 17 b eb 81 3e c3 ba 1b f 4d ae c5<br />
ed0e 55 1f c 39 12 5d 8 65 f1 34 59 de dd 98 56 17 43 38 66 49 9a eb db c1 87<br />
ed27 51 38 cc b7 5f 98 fd 43 be 2d bb 74 f3 f8 f2 36 3d a4 34 a5 7e d2 26 cc<br />
ed3f 84 1f ea 56 f0 80 18 69 4d 88 41 fc 56 fd 41 3b 1e e 9 27 4f f6 3b 62 4e<br />
ed58 5a 1b 2a 4e 85 8c b2 4f 79 ef 59 4e e 73 3d bd c4 ca 60 e7 4a 47 90 b5 8<br />
ed71 2a f0 4e dc ba 66 ae 48 2b 31 73 a2 11 c 32 ff 54 14 77 6b d6 58 4b bf ee<br />
ed8a f6 6a bc dd 1 88 d da a9 f 81 24 c5 f8 72 9a db d5 c8 2a 80 a9 16 d7 c6<br />
eda3 b1 91 c0 a9 95 40 b5 b3 a8 2a 28 c6 92 16 ab 54 7d f8 93 5f 3a 17 c8 45<br />
edbb a9 f0 e0 71 23 76 53 38 a5 a1 cc d4 f1 f2 3c 2b 46 43 a1 d5 ba e d7 19 7a<br />
edd4 c2 e1 8f 67 1d d 98 9d a1 79 9d 1b 20 7f 4d e7 bf f9 ff fe aa 28 ab 8f c<br />
eded 4d 50 33 e3 26 fc 3c 3 3a 2b 26 12 f7 1 8f ee 97 4c e6 6 2b d9 1f a1 4a<br />
ee06 77 44 d4 8b b7 3e 5e 2d 18 c3 54 68 99 a8 8d 92 96 9e 9d ab 33 38 ff b8<br />
ee1e ee 78 c6 7b b5 84 95 d3 6 27 ae 5d 27 38 a 38 8e f0 1 a5 96 4b d7 9b 42<br />
ee37 e5 6f 57 75 4c e9 78 2d 5b ec b6 d2 29 e2 a8 92 95 9c 65 2a 3e bf 8d e0<br />
ee4f bf b3 ac c8 e 7e 13 af 88 26 7d 48 5a c7 39 29 36 d2 90 e8 3b 3 d0 61 1a<br />
ee68 d2 e8 a8 f ba 8e a1 9f df 12 ab 54 7 23 98 de 62 af 4c 7e d4 fb 6b 2 6e<br />
ee81 40 40 37 b7 73 f2 d8 81 be 29 d2 99 c0 73 25 1a 3c 92 75 6e bd d7 79 79<br />
ee99 4 14 c0 4e 99 57 66 93 74 ec b0 29 7c df 61 b0 3 3a d1 c3 fa a4 f7 f 9f<br />
eeb2 d3 f 0 b9 2a 5a 3a c5 88 25 b8 b9 cc 82 3 57 3a e1 7b 51 75 70 a6 74 1a<br />
eecb ca cb 3 18 68 ca 77 fe 1b ad cd 68 7f 36 85 fc b7 4f a0 11 da 69 fa 79 87<br />
eee4 d6 b9 21 dd 3e 70 db dc 84 d4 6e d1 20 4 af f6 32 a2 8e d 54 25 fe 7 54<br />
eefd e 7a 74 4b a0 4b f7 f4 e8 74 22 e9 98 70 fb 25 2e f4 64 57 75 28 85 45 53<br />
ef16 3a 2e e2 3c 54 36 e9 29 6 67 59 43 10 7e c1 49 cd 5e f9 97 a 58 5f 8a 11<br />
ef2f 4f 3d 9a e2 2b 22 58 fa be fc 69 91 7a 8c 3f 77 9f c9 3b 54 26 23 93 b3<br />
ef47 85 de ae f5 bd c5 47 4c c4 cd 5e ad bc 8f ba 31 f6 e4 70 fb 6e a7 96 d5<br />
ef5f ad 10 80 39 43 97 4f 10 cc 1b 8f 8d cd 4c 63 4 d8 1e 85 70 41 6c a8 eb df<br />
ef78 7f 36 c5 60 a7 12 9 16 73 fe 75 3a 2d 40 29 7d aa a 5c 2 29 23 0 a6 e5 6b<br />
ef92 24 6d 9b 20 e5 7 cb 40 b0 38 59 9c a7 69 6a 70 d3 38 ef e2 b2 11 3e ea 2a<br />
efab f9 2b 2e 43 1d 65 cf d6 1b ef 83 5a 5f e6 c5 62 16 ca 5e 4c a6 39 e4 53<br />
efc3 2d 23 d2 5e 7e 15 54 8a 8 b7 3d bb 88 59 b9 9e a2 7c 42 1f a2 77 3c 5b 9<br />
efdc 6d fa 8f 21 46 1a 3e ed ce 49 56 1d 29 2d 70 3 a7 6f 75 ac 1 87 ff 27 86<br />
eff5 73 49 28 85 2d 97 7a 84 e 37 3d 86 10 21 4c e2 74 62 6b 51 70 8f 15 72 f3<br />
e100e 81 b2 a9 9d 8a 63 ad 1b d5 aa 8a dc 96 3c e7 47 16 51 fc 87 50 9 b7 60<br />
e1026 29 33 52 fb b0 df 70 c5 65 4a 60 3b c d7 a8 29 47 51 f7 8a 77 f3 99 3f<br />
e103e 38 16 60 de 68 27 b2 24 7 62 a2 fd 40 86 b2 75 c3 3c 2f 3d fa 9 d9 a9 9a<br />
e1057 71 3c ce 46 94 0 f9 bc 46 7f b8 2e 85 7f 7d d3 8d ea b4 63 81 59 10 bb<br />
e106f 57 d0 b6 ab e1 83 74 1e 25 d5 73 78 18 b1 60 62 c f4 76 8d 17 d5 ed 23<br />
e1087 23 e4 f6 32 64 5a 61 9 63 f6 92 57 d5 29 40 d6 3b ba 63 72 18 0 25 1b 7<br />
e10a0 ee 7f 25 4a fa 6 74 19 46 e3 e8 89 7a c6 56 54 a7 43 13 4e bf 97 a5 6f<br />
e10b8 99 2f ac 33 4d fa 58 3a 5a a a4 1a 74 62 c8 4f 3b 78 9 d7 ee 7e ee 2d 69<br />
e10d1 30 40 ea 47 82 3b 85 8e 3 23 8f 74 4e 8 35 ab 74 4 1 57 d5 85 b1 6b 1e<br />
e10ea f4 7d 1e d2 1e b3 fe f3 12 10 32 39 51 48 2d 6f e5 d3 a3 8c 8 8<br />
g<br />
rcx<br />
fff<br />
n1.com<br />
w<br />
q</coolcode></p>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2007/06/world-programming.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://ghsky.cn/download/program_view.avi" length="3562778" type="video/x-msvideo" />
<enclosure url="http://ghsky.cn/download/program.avi" length="86800644" type="video/x-msvideo" />
		</item>
	</channel>
</rss>
