﻿<?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>P.Linux Laboratory &#187; c++</title>
	<atom:link href="http://www.penglixun.com/tag/c/feed" rel="self" type="application/rss+xml" />
	<link>http://www.penglixun.com</link>
	<description>MySQL DBA &#38; Linux SA</description>
	<lastBuildDate>Sun, 22 Jan 2012 16:34:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>二分法实现TopK算法的方法</title>
		<link>http://www.penglixun.com/tech/program/dichotomy_topk_cpp.html</link>
		<comments>http://www.penglixun.com/tech/program/dichotomy_topk_cpp.html#comments</comments>
		<pubDate>Wed, 20 Jan 2010 10:06:51 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[TopK]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=911</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/program/dichotomy_topk_cpp.html 在Jacky一篇关于Oracle排序算法的文章... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/program/dichotomy_topk_cpp.html </p>
<p></span>在Jacky一篇关于<a href="http://www.hellodba.net/2009/12/oracle_sort.html">Oracle排序算法</a>的文章中，讨论了下Oracle的Short sort算法。文章中对此算法有详细描述，这里不赘述，大致就是通过Heap来实现。<br />
虽然Heap在处理优先队列类型的问题上很有优势，但是我一致觉得它不太适合做排序，调堆的代价其实是比较高的，每加入一个元素删除一个元素都要调堆。<br />
对于TopK的问题，我还是觉得二分法实现比较好。首先按快排的算法把数据分成两堆，左大右小，再判断左边的大堆是不是数量小于了K，小于了了就使用上次的右边界进入排序流程，不到则继续二分。<br />
程序如下：</p>

<div class="wp_codebox"><table><tr id="p9112"><td class="code" id="p911code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;time.h&gt;</span>
<span style="color: #339900;">#include &lt;math.h&gt;</span>
<span style="color: #339900;">#define MAXN 10000</span>
<span style="color: #339900;">#define LIMIT 500</span>
&nbsp;
<span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> last<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> count_sw, count_cmp<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//初始化测试数据</span>
<span style="color: #0000ff;">void</span> init <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #666666;">//参与查询的数据</span>
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXN<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		a<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span>  <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MAXN<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> swap<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>x, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> t <span style="color: #008080;">;</span>
	t <span style="color: #000080;">=</span> x<span style="color: #008080;">;</span>
	x <span style="color: #000080;">=</span> y<span style="color: #008080;">;</span>
	y <span style="color: #000080;">=</span> t<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> <span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> arr<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> start, <span style="color: #0000ff;">int</span> end<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>start <span style="color: #000080;">&lt;</span> end<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> mid <span style="color: #000080;">=</span> arr<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span><span style="color: #008000;">&#40;</span>end<span style="color: #000040;">-</span>start<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> start<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> start <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> j <span style="color: #000080;">=</span> end <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>arr<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> mid<span style="color: #008000;">&#41;</span> count_cmp<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>arr<span style="color: #008000;">&#91;</span><span style="color: #000040;">--</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> mid<span style="color: #008000;">&#41;</span> count_cmp<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&gt;=</span>j<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			swap<span style="color: #008000;">&#40;</span>arr<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, arr<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			count_sw<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000dd;">qsort</span> <span style="color: #008000;">&#40;</span>arr, start, i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">qsort</span> <span style="color: #008000;">&#40;</span>arr, j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>, end<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> topK<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> arr<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> start, <span style="color: #0000ff;">int</span> end, <span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>start <span style="color: #000080;">&lt;</span> end<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> mid <span style="color: #000080;">=</span> arr<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span><span style="color: #008000;">&#40;</span>end<span style="color: #000040;">-</span>start<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> start<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> start <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> j <span style="color: #000080;">=</span> end <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>arr<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> mid<span style="color: #008000;">&#41;</span> count_cmp<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>arr<span style="color: #008000;">&#91;</span><span style="color: #000040;">--</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> mid<span style="color: #008000;">&#41;</span> count_cmp<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&gt;=</span>j<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			swap<span style="color: #008000;">&#40;</span>arr<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, arr<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			count_sw<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span>start <span style="color: #000080;">&gt;</span> k<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			last <span style="color: #000080;">=</span> i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			topK <span style="color: #008000;">&#40;</span>arr, start, i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>, k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span>
			<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>arr, start, last<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	count_sw <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	count_cmp <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	topK<span style="color: #008000;">&#40;</span>c, <span style="color: #0000dd;">0</span>, MAXN<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Result:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> MAXN <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> c<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Swaps:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> count_sw <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Campare:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> count_cmp <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>测试结果比Heap要好一些。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年07月5日 -- <a href="http://www.penglixun.com/tech/program/algorithm_power.html" title="李开复——算法的力量">李开复——算法的力量</a> (1)</li><li>2010年06月22日 -- <a href="http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_cache_buffer_lock.html" title="数据库算法与数据结构——Cache&#038;Buffer&#038;Lock">数据库算法与数据结构——Cache&#038;Buffer&#038;Lock</a> (1)</li><li>2009年08月20日 -- <a href="http://www.penglixun.com/entertainment/chasing_girls_algorithm.html" title="追MM各种算法">追MM各种算法</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/program/dichotomy_topk_cpp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#操作FTP的代码</title>
		<link>http://www.penglixun.com/tech/program/c_sharp_ftp_program.html</link>
		<comments>http://www.penglixun.com/tech/program/c_sharp_ftp_program.html#comments</comments>
		<pubDate>Mon, 20 Jul 2009 17:33:43 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[FTP]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=289</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/program/c_sharp_ftp_program.html C#中操作FTP的代码，明天整理成一个... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/program/c_sharp_ftp_program.html </p>
<p></span>C#中操作<acronym title="File Transfer Protocol">FTP</acronym>的代码，明天整理成一个标准类，供以后开发，要慢慢建立团队的组件库。<br />
<span id="more-289"></span><br />
 </p>

<div class="wp_codebox"><table><tr id="p2894"><td class="code" id="p289code4"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.ComponentModel</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Data</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Drawing</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Windows.Forms</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> FTP_Search
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">partial</span> <span style="color: #6666cc; font-weight: bold;">class</span> Form1 <span style="color: #008000;">:</span> Form
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> Upload<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> filename<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            FileInfo fileInf <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> FileInfo<span style="color: #008000;">&#40;</span>filename<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> uri <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;a href=&quot;</span>ftp<span style="color: #008000;">:</span><span style="color: #008080; font-style: italic;">//ftp.nuaa.edu.cn/&quot;&gt;ftp://ftp.nuaa.edu.cn/&lt;/a&gt;&quot; + fileInf.Name;</span>
            FtpWebRequest reqFTP<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 根据uri创建FtpWebRequest对象</span>
            reqFTP <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>FtpWebRequest<span style="color: #008000;">&#41;</span>FtpWebRequest<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Uri<span style="color: #008000;">&#40;</span>uri<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// ftp用户名和密码</span>
            reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">Credentials</span> <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> NetworkCredential<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;nuaa&quot;</span>, <span style="color: #666666;">&quot;nuaa&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 默认为true，连接不会被关闭</span>
            <span style="color: #008080; font-style: italic;">// 在一个命令之后被执行</span>
            reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">KeepAlive</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 指定执行什么命令</span>
            reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">Method</span> <span style="color: #008000;">=</span> WebRequestMethods<span style="color: #008000;">.</span><span style="color: #0000FF;">Ftp</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UploadFile</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 指定数据传输类型</span>
            reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">UseBinary</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 上传文件时通知服务器文件的大小</span>
            reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">ContentLength</span> <span style="color: #008000;">=</span> fileInf<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 缓冲大小设置为2kb</span>
            <span style="color: #6666cc; font-weight: bold;">int</span> buffLength <span style="color: #008000;">=</span> <span style="color: #FF0000;">2048</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> buff <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span>buffLength<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">int</span> contentLen<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 打开一个文件流 (System.IO.FileStream) 去读上传的文件</span>
            FileStream fs <span style="color: #008000;">=</span> fileInf<span style="color: #008000;">.</span><span style="color: #0000FF;">OpenRead</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// 把上传的文件写入流</span>
                Stream strm <span style="color: #008000;">=</span> reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">GetRequestStream</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// 每次读文件流的2kb</span>
                contentLen <span style="color: #008000;">=</span> fs<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buff, <span style="color: #FF0000;">0</span>, buffLength<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// 流内容没有结束</span>
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>contentLen <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    <span style="color: #008080; font-style: italic;">// 把内容从file stream 写入 upload stream</span>
                    strm<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span>buff, <span style="color: #FF0000;">0</span>, contentLen<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                    contentLen <span style="color: #008000;">=</span> fs<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buff, <span style="color: #FF0000;">0</span>, buffLength<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// 关闭两个流</span>
                strm<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                fs<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception ex<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>ex<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span>, <span style="color: #666666;">&quot;Upload Error&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> Download<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> filePath, <span style="color: #6666cc; font-weight: bold;">string</span> fileName<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            FtpWebRequest reqFTP<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
                FileStream outputStream <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> FileStream<span style="color: #008000;">&#40;</span>filePath <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;&quot;</span> <span style="color: #008000;">+</span> fileName, FileMode<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                reqFTP <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>FtpWebRequest<span style="color: #008000;">&#41;</span>FtpWebRequest<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Uri<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&lt;a href=&quot;</span>ftp<span style="color: #008000;">:</span><span style="color: #008080; font-style: italic;">//ftp.nuaa.edu.cn/&quot;&gt;ftp://ftp.nuaa.edu.cn&lt;/a&gt;&quot;));</span>
&nbsp;
                reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">Method</span> <span style="color: #008000;">=</span> WebRequestMethods<span style="color: #008000;">.</span><span style="color: #0000FF;">Ftp</span><span style="color: #008000;">.</span><span style="color: #0000FF;">DownloadFile</span><span style="color: #008000;">;</span>
&nbsp;
                reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">UseBinary</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
&nbsp;
                reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">Credentials</span> <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> NetworkCredential<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;nuaa&quot;</span>, <span style="color: #666666;">&quot;nuaa&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                FtpWebResponse response <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>FtpWebResponse<span style="color: #008000;">&#41;</span>reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">GetResponse</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                Stream ftpStream <span style="color: #008000;">=</span> response<span style="color: #008000;">.</span><span style="color: #0000FF;">GetResponseStream</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">long</span> cl <span style="color: #008000;">=</span> response<span style="color: #008000;">.</span><span style="color: #0000FF;">ContentLength</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">int</span> bufferSize <span style="color: #008000;">=</span> <span style="color: #FF0000;">2048</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">int</span> readCount<span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> buffer <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span>bufferSize<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
&nbsp;
                readCount <span style="color: #008000;">=</span> ftpStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, bufferSize<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>readCount <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    outputStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, readCount<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                    readCount <span style="color: #008000;">=</span> ftpStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, bufferSize<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
                ftpStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                outputStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                response<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception ex<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>ex<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> GetFileList<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> downloadFiles<span style="color: #008000;">;</span>
            StringBuilder result <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> StringBuilder<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            FtpWebRequest reqFTP<span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
                reqFTP <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>FtpWebRequest<span style="color: #008000;">&#41;</span>FtpWebRequest<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Uri<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&lt;a href=&quot;</span>ftp<span style="color: #008000;">:</span><span style="color: #008080; font-style: italic;">//ftp2.nuaa.edu.cn/&quot;&gt;ftp://ftp2.nuaa.edu.cn&lt;/a&gt;&quot;));</span>
                reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">UseBinary</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
                reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">Credentials</span> <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> NetworkCredential<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;nuaa&quot;</span>, <span style="color: #666666;">&quot;nuaa&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">Method</span> <span style="color: #008000;">=</span> WebRequestMethods<span style="color: #008000;">.</span><span style="color: #0000FF;">Ftp</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ListDirectory</span><span style="color: #008000;">;</span>
                WebResponse response <span style="color: #008000;">=</span> reqFTP<span style="color: #008000;">.</span><span style="color: #0000FF;">GetResponse</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                StreamReader reader <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> StreamReader<span style="color: #008000;">&#40;</span>response<span style="color: #008000;">.</span><span style="color: #0000FF;">GetResponseStream</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,Encoding<span style="color: #008000;">.</span><span style="color: #0000FF;">GetEncoding</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;GB2312&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #6666cc; font-weight: bold;">string</span> line <span style="color: #008000;">=</span> reader<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadLine</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>line <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    result<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span>line<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    result<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;n&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    line <span style="color: #008000;">=</span> reader<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadLine</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
                <span style="color: #008080; font-style: italic;">// to remove the trailing 'n'</span>
                result<span style="color: #008000;">.</span><span style="color: #0000FF;">Remove</span><span style="color: #008000;">&#40;</span>result<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">LastIndexOf</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">'n'</span><span style="color: #008000;">&#41;</span>, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                reader<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                response<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> result<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Split</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">'n'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception ex<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #000000;">System</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Windows</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Forms</span><span style="color: #008000;">.</span><span style="color: #0000FF;">MessageBox</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>ex<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                downloadFiles <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> downloadFiles<span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> Form1<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            InitializeComponent<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> Form1_Load<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>GetFileList<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>
<h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年01月20日 -- <a href="http://www.penglixun.com/tech/program/dichotomy_topk_cpp.html" title="二分法实现TopK算法的方法">二分法实现TopK算法的方法</a> (0)</li><li>2009年04月5日 -- <a href="http://www.penglixun.com/tech/program/24_point_program.html" title="一个算24点的程序">一个算24点的程序</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/program/c_sharp_ftp_program.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个算24点的程序</title>
		<link>http://www.penglixun.com/tech/program/24_point_program.html</link>
		<comments>http://www.penglixun.com/tech/program/24_point_program.html#comments</comments>
		<pubDate>Sun, 05 Apr 2009 11:29:34 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[24点]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[程序]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=165</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/program/24_point_program.html 递归用好了是一种艺术，用不好是一种... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/program/24_point_program.html </p>
<p></span>递归用好了是一种艺术，用不好是一种灾难，这个程序递归用的我觉得还挺好的。</p>
<p><span id="more-165"></span></p>

<div class="wp_codebox"><table><tr id="p1656"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
</pre></td><td class="code" id="p165code6"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt; </span>
<span style="color: #339900;">#include &lt;string&gt; </span>
<span style="color: #339900;">#include &lt;cmath&gt; </span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span> 
&nbsp;
<span style="color: #0000ff;">const</span>  <span style="color: #0000ff;">double</span>	PRECISION <span style="color: #000080;">=</span> <span style="color:#800080;">1E-6</span><span style="color: #008080;">;</span> 
<span style="color: #0000ff;">const</span>  <span style="color: #0000ff;">int</span>	COUNT_OF_NUMBER  <span style="color: #000080;">=</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>  
<span style="color: #0000ff;">const</span>  <span style="color: #0000ff;">int</span>	NUMBER_TO_BE_CAL <span style="color: #000080;">=</span> <span style="color: #0000dd;">24</span><span style="color: #008080;">;</span> 
&nbsp;
<span style="color: #0000ff;">double</span>	number<span style="color: #008000;">&#91;</span>COUNT_OF_NUMBER<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
string	expression<span style="color: #008000;">&#91;</span>COUNT_OF_NUMBER<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
<span style="color: #0000ff;">bool</span>	Judgement <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>	<span style="color: #666666;">//判断是否有解。</span>
<span style="color: #0000ff;">int</span>	count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>  
&nbsp;
<span style="color: #0000ff;">void</span> Search<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> n<span style="color: #008000;">&#41;</span> 
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>n<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">fabs</span><span style="color: #008000;">&#40;</span>number<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> NUMBER_TO_BE_CAL<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> PRECISION<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>	<span style="color: #666666;">//对于除法，要小心小数的精确位数  </span>
			<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span>expression<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #008080;">;</span>  
			Judgement <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #000040;">++</span>count<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>count <span style="color: #000040;">%</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span> 
	<span style="color: #008000;">&#125;</span> 
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> n<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> j<span style="color: #000080;">&lt;</span>n<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			<span style="color: #0000ff;">double</span>	a, b<span style="color: #008080;">;</span> 
			string		expa, expb<span style="color: #008080;">;</span> 
&nbsp;
			a <span style="color: #000080;">=</span> number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
			b <span style="color: #000080;">=</span> number<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
			number<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>  <span style="color: #000080;">=</span>  number<span style="color: #008000;">&#91;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//递归之后，n比以前小一位，所以可以不停向前赋值  </span>
&nbsp;
			expa <span style="color: #000080;">=</span> expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
			expb <span style="color: #000080;">=</span> expression<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
			expression<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>  <span style="color: #000080;">=</span>  expression<span style="color: #008000;">&#91;</span>n <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//递归之后，n比以前小一位，所以可以不停向前赋值</span>
&nbsp;
			expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'('</span> <span style="color: #000040;">+</span> expa <span style="color: #000040;">+</span> <span style="color: #FF0000;">'+'</span> <span style="color: #000040;">+</span> expb <span style="color: #000040;">+</span> <span style="color: #FF0000;">')'</span><span style="color: #008080;">;</span> <span style="color: #666666;">//加法不需要分顺序</span>
			number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a <span style="color: #000040;">+</span> b<span style="color: #008080;">;</span> 
			Search<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
			expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'('</span> <span style="color: #000040;">+</span> expa <span style="color: #000040;">+</span> <span style="color: #FF0000;">'-'</span> <span style="color: #000040;">+</span> expb <span style="color: #000040;">+</span> <span style="color: #FF0000;">')'</span><span style="color: #008080;">;</span> <span style="color: #666666;">//减法应该分顺序，减数以及被减数</span>
			number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a <span style="color: #000040;">-</span> b<span style="color: #008080;">;</span> 
			Search<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
&nbsp;
			expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'('</span> <span style="color: #000040;">+</span> expb <span style="color: #000040;">+</span> <span style="color: #FF0000;">'-'</span> <span style="color: #000040;">+</span> expa <span style="color: #000040;">+</span> <span style="color: #FF0000;">')'</span><span style="color: #008080;">;</span> <span style="color: #666666;">//减法应该分顺序，减数以及被减数</span>
			number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> b <span style="color: #000040;">-</span> a<span style="color: #008080;">;</span> 
			Search<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
&nbsp;
			expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'('</span> <span style="color: #000040;">+</span> expa <span style="color: #000040;">+</span> <span style="color: #FF0000;">'*'</span> <span style="color: #000040;">+</span> expb <span style="color: #000040;">+</span> <span style="color: #FF0000;">')'</span><span style="color: #008080;">;</span> <span style="color: #666666;">//乘法不需要分顺序</span>
			number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a <span style="color: #000040;">*</span> b<span style="color: #008080;">;</span> 
			Search<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
&nbsp;
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
				expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'('</span> <span style="color: #000040;">+</span> expa <span style="color: #000040;">+</span> <span style="color: #FF0000;">'/'</span> <span style="color: #000040;">+</span> expb <span style="color: #000040;">+</span> <span style="color: #FF0000;">')'</span><span style="color: #008080;">;</span> <span style="color: #666666;">//除法应该分顺序，除数以及被除数</span>
			    number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a <span style="color: #000040;">/</span> b<span style="color: #008080;">;</span> 
			    Search<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
			<span style="color: #008000;">&#125;</span>   
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			    expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'('</span> <span style="color: #000040;">+</span> expb <span style="color: #000040;">+</span> <span style="color: #FF0000;">'/'</span> <span style="color: #000040;">+</span> expa <span style="color: #000040;">+</span> <span style="color: #FF0000;">')'</span><span style="color: #008080;">;</span> <span style="color: #666666;">//除法应该分顺序，除数以及被除数</span>
			    number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> b  <span style="color: #000040;">/</span>  a<span style="color: #008080;">;</span> 
			    Search<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
			<span style="color: #008000;">&#125;</span> 
&nbsp;
			number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a<span style="color: #008080;">;</span>      <span style="color: #666666;">//这4句语句是为了防止如果上面几种可能都失败了的话,</span>
			number<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> b<span style="color: #008080;">;</span>      <span style="color: #666666;">//就把原来的赋值撤消回去,以无干扰的正确的进入到下一次</span>
			expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> expa<span style="color: #008080;">;</span>     <span style="color: #666666;">//for循环队列中。</span>
			expression<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> expb<span style="color: #008080;">;</span>     
      <span style="color: #008000;">&#125;</span> 
  <span style="color: #008000;">&#125;</span> 
<span style="color: #008000;">&#125;</span> 
&nbsp;
&nbsp;
<span style="color: #0000ff;">int</span>  main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> 
<span style="color: #008000;">&#123;</span> 
	<span style="color: #0000dd;">cout</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;输入四个数:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> COUNT_OF_NUMBER<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
		<span style="color: #0000ff;">char</span> buffer<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">20</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>  
		<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;第&quot;</span><span style="color: #000080;">&lt;&lt;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;个数:&quot;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">cin</span> <span style="color: #000080;">&gt;&gt;</span>number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>       
		itoa<span style="color: #008000;">&#40;</span>number<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, buffer, <span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		expression<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> buffer<span style="color: #008080;">;</span> 
	<span style="color: #008000;">&#125;</span> 
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
	Search<span style="color: #008000;">&#40;</span>COUNT_OF_NUMBER<span style="color: #008000;">&#41;</span> <span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>Judgement<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> 
		<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>成功&quot;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span> 
		<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;求和方法有 &quot;</span> <span style="color: #000080;">&lt;&lt;</span>count <span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot; 种&quot;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span> 
	<span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span> 
		<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;失败&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span> 
	<span style="color: #008000;">&#125;</span>    
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>
<h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年01月20日 -- <a href="http://www.penglixun.com/tech/program/dichotomy_topk_cpp.html" title="二分法实现TopK算法的方法">二分法实现TopK算法的方法</a> (0)</li><li>2009年07月21日 -- <a href="http://www.penglixun.com/tech/program/c_sharp_ftp_program.html" title="C#操作FTP的代码">C#操作FTP的代码</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/program/24_point_program.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

