﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-程序描绘人生</title><link>http://www.cppblog.com/humanchao/</link><description>知识改变命运，学习成就未来。</description><language>zh-cn</language><lastBuildDate>Fri, 05 Dec 2008 16:38:36 GMT</lastBuildDate><pubDate>Fri, 05 Dec 2008 16:38:36 GMT</pubDate><ttl>60</ttl><item><title>将字符串里词顺序倒置</title><link>http://www.cppblog.com/humanchao/archive/2008/09/12/61708.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Fri, 12 Sep 2008 12:42:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/09/12/61708.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/61708.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/09/12/61708.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/61708.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/61708.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 14pt">将字符串里词顺序倒置，如"Times New Roman"变为"Roman New Times"。以空格为分隔符。<br><br>解决方案为：先将整个字串倒置，然后依次把倒置后串中的每一个单词倒置。<br><br>这个问题解答的思路很简单，但是要考虑到很多种的情况，比如字符串的头、尾有多余的空格怎么办，如果字符串中只有空格，还有字符串中间可能会有两个以上并列的空格。<br><br>程序如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ReverseStr(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pStr,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len)<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;assert(pStr);<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ch;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;len</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pStr[i];<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStr[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pStr[len</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i];<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStr[len</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ch;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ReverseStrWord(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pStr,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len)<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;assert(pStr);<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(len&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;倒置整个字符串</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ReverseStr(pStr,&nbsp;len);<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;处理头多余的空格</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pStr[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(pStr[i]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;len)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;整个串都是空格</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;len)<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;处理尾多余的空格</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pStr[len&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(pStr[len&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;len&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;len</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;len;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;最后的end要+1</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;len</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReverseStr(pStr</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">start,&nbsp;i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">start</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;倒置一个单词</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pStr[i]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReverseStr(pStr</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">start,&nbsp;i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">start);<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;处理内部并列的空格</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pStr[start]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(pStr[start]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;{i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;start</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;};<br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000"></span></div>
<p style="FONT-SIZE: 14pt">&nbsp;</p>
<p style="FONT-SIZE: 14pt">说实话，如果是突然面对这样一个问题，要在一张纸上写下比较完整的程序是不大可能。能边调试边写程序有的时候也是一件幸事。<br>中秋节要到了，我要换工作了，告别已经工作两年多熟悉的环境，感觉这两年没有太大的进步，奋斗吧，趁着自己还年轻！</p>
<img src ="http://www.cppblog.com/humanchao/aggbug/61708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-09-12 20:42 <a href="http://www.cppblog.com/humanchao/archive/2008/09/12/61708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求整数1~N范围和为M的所有组合</title><link>http://www.cppblog.com/humanchao/archive/2008/08/29/60368.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Fri, 29 Aug 2008 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/08/29/60368.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/60368.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/08/29/60368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/60368.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/60368.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;"><span style="font-weight: bold;">问题</span>：<span style="font-style: italic;">找出整数1~N范围和为M的所有集合，M&lt;=N且M&gt;1，集合里的数不允许重复。</span><br><br><span style="font-weight: bold;">解答</span>：这个问题用<span style="font-weight: bold;">递归</span>解决最简单，代码如下：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;MAX_NUM&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">要足够大</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;log[MAX_NUM];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">记录和数</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">log[]数组的当前指针</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;calc(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;start,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(n&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;index;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;log[j]);<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;start;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">n;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log[index</span><span style="color: #000000;">++</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calc(i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;n&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;i);<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;index</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>如果允许重复只需要将上面第18条代码改为：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">calc(i,&nbsp;n&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;i);</span></div>
<br>即可。<br><br><span style="font-weight: bold;">扩展问题</span>：<span style="font-style: italic;">在数组{5,1,7,9,2,10,11,4,13,14}中找到和为28的所有集合，集合中不允许有重复的数。</span><br><br><span style="font-weight: bold;">解答：第一步要先对数组排序，然后按照上去的思路，对程序略做一些改动。</span><br style="font-weight: bold;">代码如下：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;MAX_NUM&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">要足够大</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;log[MAX_NUM];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">记录和数</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">log[]数组的当前指针</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;calc__(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">nArr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">数组,&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int</span><span style="color: #000000;">&nbsp;start&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">数组起始元素下标,&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nArrLen&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">数组长度,&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum)<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(sum&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;&nbsp;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;index;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;log[j]);<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;start;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nArrLen;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log[index</span><span style="color: #000000;">++</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nArr[i];&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calc__(nArr,&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;nArrLen,&nbsp;sum&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;nArr[i]);<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;index</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>这个问题的解答思路是相当简单的，但如何把程序写的细致、简捷是除了解答思路以外的另一个关键。就像迷宫最短路径的那个问题，言语描述很简单，但把实现的程序写好确要花一些时间。<br><br> </span> <img src ="http://www.cppblog.com/humanchao/aggbug/60368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-08-29 16:13 <a href="http://www.cppblog.com/humanchao/archive/2008/08/29/60368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重建二叉树</title><link>http://www.cppblog.com/humanchao/archive/2008/08/27/60174.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Wed, 27 Aug 2008 09:51:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/08/27/60174.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/60174.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/08/27/60174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/60174.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/60174.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;">已知前序和中序：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;NODE&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;NODE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pLeft;<br>&nbsp;&nbsp;&nbsp;&nbsp;NODE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pRight;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;chValue;<br>};<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;CharInStrFirstPos(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;ch,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">str,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pOrgStr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(nLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;ch&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">str)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;(nLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;(str&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;pOrgStr)&nbsp;:&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>}<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;ReBuild_PreIn(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pPreOrder,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pInOrder,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nTreeLen,&nbsp;NODE&nbsp;</span><span style="color: #000000;">**</span><span style="color: #000000;">pRoot)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pPreOrder&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;pInOrder&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;NODE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pTemp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;NODE;<br>&nbsp;&nbsp;&nbsp;&nbsp;pTemp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">chValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pPreOrder;<br>&nbsp;&nbsp;&nbsp;&nbsp;pTemp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pLeft&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;pTemp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pRight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nTreeLen&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLeftLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CharInStrFirstPos(</span><span style="color: #000000;">*</span><span style="color: #000000;">pPreOrder,&nbsp;pInOrder,&nbsp;nTreeLen);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(nLeftLen&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nRightLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nTreeLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;nLeftLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nLeftLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReBuild_PreIn(pPreOrder&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;pInOrder,&nbsp;nLeftLen,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">((</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pLeft));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nRightLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReBuild_PreIn(pPreOrder&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;nLeftLen&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;pInOrder&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;nLeftLen&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nRightLen,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">((</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pRight));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
<br>已知后序和中序：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;ReBuild_AftIn(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pAftOrder,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pInOrder,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nTreeLen,&nbsp;NODE&nbsp;</span><span style="color: #000000;">**</span><span style="color: #000000;">pRoot)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pAftOrder&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;pInOrder&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;NODE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pTemp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;NODE;<br>&nbsp;&nbsp;&nbsp;&nbsp;pTemp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">chValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pAftOrder;<br>&nbsp;&nbsp;&nbsp;&nbsp;pTemp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pLeft&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;pTemp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pRight&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nTreeLen&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLeftLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CharInStrFirstPos(</span><span style="color: #000000;">*</span><span style="color: #000000;">pAftOrder,&nbsp;pInOrder,&nbsp;nTreeLen);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(nLeftLen&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nRightLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nTreeLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;nLeftLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nLeftLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReBuild_AftIn(pAftOrder&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;nRightLen&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;pInOrder,&nbsp;nLeftLen,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">((</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pLeft));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nRightLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReBuild_AftIn(pAftOrder&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;pInOrder&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;nLeftLen&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nRightLen,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">((</span><span style="color: #000000;">*</span><span style="color: #000000;">pRoot)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pRight));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>我上传了一个工VC的工程，有兴趣的朋友<a href="http://www.cppblog.com/Files/humanchao/BuildTree.rar">点此下载</a>。代码参考于《编程之美》。<br> </span><img src ="http://www.cppblog.com/humanchao/aggbug/60174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-08-27 17:51 <a href="http://www.cppblog.com/humanchao/archive/2008/08/27/60174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>断言式编程</title><link>http://www.cppblog.com/humanchao/archive/2008/08/19/59309.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Tue, 19 Aug 2008 02:00:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/08/19/59309.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/59309.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/08/19/59309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/59309.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/59309.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;">我们先看一个函数：函数的功能完成1~10的加法。<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;Add1to10(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">b;<br>}<br></span></div>
<br>但是一般我们还需要加上几条代码：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;Add1to10(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(a&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(b&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;a&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">b;<br>}</span></div>
<br>加上上面几条代码的作用是检查函数的输入参数，当参数不正确的时候不光要在返回值上得到体现，而且会触发assert断言，提醒我们参数有误。<br><br>断言式编程体现一个编程的思想，在我们的程序执行偏离预想的路线时给出提醒。当程序执行偏离预想的路线时一般会出现两种可能：即断言以上的程序没有理解下面程序的调用条件、或断言以下的程序需要接受更为宽泛输入条件。以下分别讨论修改方法：<br><br>1、如果函数的输入参数是我们编程的一个疏漏，我们认为根本就不应该出现或产生这样的值，那我们应该修改调用函数处的代码，避免非预想的值出现。<br><br>2、如果无法避免出现或者产生一个非法输入值，那我们要么在函数调用处加入判断，产生符合条件的值时调用函数，不符合参数条件else处理；要么修改函数，使函数可以接受更为宽泛输入条件，并调整断言内容和参数判断逻辑。<br><br>断言不仅可以出现在函数的参数检查的场合，也可以出现在其他的上下文调用的场合。而且它还会随着程序的开发进程逐渐的增加、删除和调整。它可以验证程序是按照我们预想的思路在执行，当出现意外时及时的给出提醒，提醒我们修正程序或者自己的思路。<br><br></span>  <img src ="http://www.cppblog.com/humanchao/aggbug/59309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-08-19 10:00 <a href="http://www.cppblog.com/humanchao/archive/2008/08/19/59309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Quick Sort C Code Implement</title><link>http://www.cppblog.com/humanchao/archive/2008/08/18/59241.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Mon, 18 Aug 2008 09:02:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/08/18/59241.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/59241.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/08/18/59241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/59241.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/59241.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;QuickSort(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pData,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;left,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;right)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;left,&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;right;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;middle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pData[(left</span><span style="color: #000000;">+</span><span style="color: #000000;">right)</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;midlle&nbsp;value</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;iTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(pData[i]&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;middle&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;right)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(pData[j]&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;middle&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;left)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;j)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;swap</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iTemp&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pData[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[j]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;iTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;j);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(left&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;j)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QuickSort(pData,left,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(right&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QuickSort(pData,i,right);<br>}<br></span></div>
<br>没的说，理解不了就是背也得把这段代码背下来。<br> </span> <img src ="http://www.cppblog.com/humanchao/aggbug/59241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-08-18 17:02 <a href="http://www.cppblog.com/humanchao/archive/2008/08/18/59241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> （转）数据结构和算法Flash动画演示</title><link>http://www.cppblog.com/humanchao/archive/2008/07/24/57063.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Thu, 24 Jul 2008 08:19:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/07/24/57063.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/57063.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/07/24/57063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/57063.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/57063.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;">学习数据结构和算法的好东西，非常形象，制作水平比较高，向制作者致敬！里面包含以下算法的过程演示：<br><br><span style="color: #9830ff; font-weight: bold;">B树的删除</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">B树的生长过程</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">三元组表的转置</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">中序线索化二叉树</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">串的顺序存储</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">二分查找</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">二叉排序树的删除</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">二叉排序树的生成</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">二叉树的建立</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">克鲁斯卡尔算法构造最小生成树</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">冒泡排序</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">分块查找</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">单链表结点的删除</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">单链表结点的插入</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">图的深度优先遍历</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">基数排序</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">堆排序</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">头插法建单链表</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">寻找中序线索化二叉树指定结点的前驱</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">寻找中序线索化二叉树指定结点的后继</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">尾插法建表</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">希儿排序</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">开放定址法建立散列表</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">循环队列操作演示</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">快速排序</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">拉链法创建散列表</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">拓扑排序</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">数据结构和算法Flash动画演示.rar</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">最短路径</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">朴素串匹配算法过程示意</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">构造哈夫曼树的算法模拟</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">构造哈夫曼树过程</span><br style="color: #9830ff; font-weight: bold;"><span style="color: #9830ff; font-weight: bold;">栈与递归<br>...更多</span><br><br><a  href="http://www.cppblog.com/Files/humanchao/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%92%8C%E7%AE%97%E6%B3%95Flash%E5%8A%A8%E7%94%BB%E6%BC%94%E7%A4%BA.rar">点击下载</a><br><br><br><br><br><br><br></span><img src ="http://www.cppblog.com/humanchao/aggbug/57063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-07-24 16:19 <a href="http://www.cppblog.com/humanchao/archive/2008/07/24/57063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在NSIS中执行BAT文件</title><link>http://www.cppblog.com/humanchao/archive/2008/07/23/56962.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Wed, 23 Jul 2008 08:47:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/07/23/56962.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/56962.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/07/23/56962.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/56962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/56962.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;">如果BAT不带参数，脚本内容如下：<br><br>SetOutPath '$INSTDIR'<br>ExecWait '$INSTDIR\A.bat'<br><br>如果BAT需要参数时，要把带参数的命令写入另外一个新的BAT中，执行新BAT：<br><br>B.bat内容：<br>CALL A.bat install<br><br>NSIS 脚本：<br>SetOutPath '$INSTDIR'<br>ExecWait '$INSTDIR\B.bat'<br> </span><img src ="http://www.cppblog.com/humanchao/aggbug/56962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-07-23 16:47 <a href="http://www.cppblog.com/humanchao/archive/2008/07/23/56962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC取得目录大小</title><link>http://www.cppblog.com/humanchao/archive/2008/07/02/55154.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Wed, 02 Jul 2008 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/07/02/55154.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/55154.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/07/02/55154.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/55154.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/55154.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>#import&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">scrrun.dll</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;raw_interfaces_only<br><br>// 参数格式："c:\" 或 "c:\test"<br>ULONGLONG&nbsp;GetPathUseSpace(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">szPath)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(szPath&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;strlen(szPath);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nLen&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;ULONGLONG&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nLen&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">)&nbsp;&nbsp;  &nbsp;&nbsp;  // </span><span style="color: #000000;">c:\</span><br><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ULARGE_INTEGER&nbsp;nFreeBytesAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ULARGE_INTEGER&nbsp;nTotalNumberOfBytes;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ULARGE_INTEGER&nbsp;nTotalNumberOfFreeBytes;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//<br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(GetDiskFreeSpaceEx(szPath,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">nFreeBytesAvailable,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">nTotalNumberOfBytes,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">nTotalNumberOfFreeBytes))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nTotalNumberOfBytes.QuadPart&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;nFreeBytesAvailable.QuadPart;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoInitialize(NULL);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scripting::IFileSystem3Ptr&nbsp;&nbsp;&nbsp;fs;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.CreateInstance(__uuidof(Scripting::FileSystemObject));&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scripting::IFolderPtr&nbsp;&nbsp;&nbsp;folder;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetFolder(_bstr_t(szPath),</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">folder);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_variant_t&nbsp;vsize;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;folder</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">get_Size(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">vsize);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">double</span><span style="color: #000000;">)vsize;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(_com_error&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">e)&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;result;<br>}<br></span></div>
<br><br>VC取得目录的大小可以用COM方式，但是在某些操作系统上使用COM方式取根目录大小（即某一个盘已用空间）会出现问题，<span style="color: #000000;">可以用</span><span style="color: #000000;">GetDiskFreeSpaceEx</span>，上面是我写了一个小函数。<br>  </span><img src ="http://www.cppblog.com/humanchao/aggbug/55154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-07-02 16:33 <a href="http://www.cppblog.com/humanchao/archive/2008/07/02/55154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图解快速排序:转</title><link>http://www.cppblog.com/humanchao/archive/2008/05/26/51098.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Mon, 26 May 2008 02:14:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/05/26/51098.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/51098.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/05/26/51098.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/51098.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/51098.html</trackback:ping><description><![CDATA[<div style="text-align: center;"><img alt=""  src="http://blufiles.storage.live.com/y1pupHunBfQm0q3rb_vwo-7VBfsZwCgzKTxoPFTAwQrov5woi4192hVM3m6SV0sbIN3rlGoq-KsS7A"><br></div><img src ="http://www.cppblog.com/humanchao/aggbug/51098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-05-26 10:14 <a href="http://www.cppblog.com/humanchao/archive/2008/05/26/51098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断单链表是否存在环，判断两个链表是否相交问题详解</title><link>http://www.cppblog.com/humanchao/archive/2008/04/17/47357.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Thu, 17 Apr 2008 02:21:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/04/17/47357.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/47357.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/04/17/47357.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/47357.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/47357.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"><span style="font-size: 14pt;">有一个单链表，其中可能有一个环，也就是某个节点的next指向的是链表中在它之前的节点，这样在链表的尾部形成一环。<br><br>问题：<br><br>1、如何判断一个链表是不是这类链表？<br>2、如果链表为存在环，如果找到环的入口点？<br><br>解答：<br><br>一、判断链表是否存在环，办法为：<br><br>设置两个指针(fast, slow)，初始值都指向头，slow每次前进一步，fast每次前进二步，如果链表存在环，则fast必定先进入环，而slow后进入环，两个指针必定相遇。(当然，fast先行头到尾部为NULL，则为无环链表)程序如下：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">bool&nbsp;IsExitsLoop(slist </span><span style="color: #000000;">*</span><span style="color: #000000;">head)<br>{<br>&nbsp;&nbsp;&nbsp; slist </span><span style="color: #000000;">*</span><span style="color: #000000;">slow </span><span style="color: #000000;"></span><span style="color: #000000;">=</span><span style="color: #000000;"> head</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fast = head;<br></span><span style="color: #000000;"></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; while</span><span style="color: #000000;">&nbsp;(&nbsp;fast&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;fast</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; slow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;slow</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; fast&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fast</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;slow&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;fast&nbsp;)&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp; }<br><br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">(fast&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;fast</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL);<br>}</span></div>
<br>二、找到环的入口点<br><br>当fast若与slow相遇时，slow肯定没有走遍历完链表，而fast已经在环内循环了n圈(1&lt;=n)。假设slow走了s步，则fast走了2s步（fast步数还等于s 加上在环上多转的n圈），设环长为r，则：<br><br>2s = s + nr<br>s= nr<br><br>设整个链表长L，入口环与相遇点距离为x，起点到环入口点的距离为a。<br>a + x = nr<br>a + x = (n &#8211; 1)r +r = (n-1)r + L - a<br>a = (n-1)r + (L &#8211; a &#8211; x)<br><br>(L &#8211; a &#8211; x)为相遇点到环入口点的距离，由此可知，从链表头到环入口点等于(n-1)循环内环+相遇点到环入口点，于是我们从链表头、与相遇点分别设一个指针，每次各走一步，两个指针必定相遇，且相遇第一点为环入口点。程序描述如下：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">slist</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;FindLoopPort(slist </span><span style="color: #000000;">*</span><span style="color: #000000;">head)<br>{<br>&nbsp;&nbsp;&nbsp; slist </span><span style="color: #000000;">*</span><span style="color: #000000;">slow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;head,&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fast&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;head;<br><br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; while</span><span style="color: #000000;">&nbsp;(&nbsp;fast&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;fast</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; slow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;slow</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; fast&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fast</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;slow&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;fast&nbsp;)&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp; }<br><br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; if</span><span style="color: #000000;">&nbsp;(fast&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;fast</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; return</span><span style="color: #000000;">&nbsp;NULL;<br><br>&nbsp;&nbsp;&nbsp; slow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;head;<br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; while</span><span style="color: #000000;">&nbsp;(slow&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;fast)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; slow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;slow</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fast&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fast</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br>&nbsp;&nbsp;&nbsp; }<br><br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; return</span><span style="color: #000000;">&nbsp;slow;<br>}</span></div>
<br><br>扩展问题：<br><br>判断两个单链表是否相交，如果相交，给出相交的第一个点（两个链表都不存在环）。<br><br>比较好的方法有两个：<br><br>一、将其中一个链表首尾相连，检测另外一个链表是否存在环，如果存在，则两个链表相交，而检测出来的依赖环入口即为相交的第一个点。<br><br>二、如果两个链表相交，那个两个链表从相交点到链表结束都是相同的节点，我们可以先遍历一个链表，直到尾部，再遍历另外一个链表，如果也可以走到同样的结尾点，则两个链表相交。<br><br>这时我们记下两个链表length，再遍历一次，长链表节点先出发前进(lengthMax-lengthMin)步，之后两个链表同时前进，每次一步，相遇的第一点即为两个链表相交的第一个点。<br><br><br><br></span> </span>    <img src ="http://www.cppblog.com/humanchao/aggbug/47357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-04-17 10:21 <a href="http://www.cppblog.com/humanchao/archive/2008/04/17/47357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迷宫最短路径问题解析</title><link>http://www.cppblog.com/humanchao/archive/2008/03/18/44783.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Tue, 18 Mar 2008 09:47:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/03/18/44783.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/44783.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/03/18/44783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/44783.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/44783.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有一个二维数组，0表示路，-1表示墙，求其中任意两点的最短路径。我们先看，怎么求一条路径：求两点路径是一个数据结构上的典型的迷宫问题，很多数据结构的书上都有介绍，解决办法如下：从一点开始出发，向四个方向查找，每走一步，把走过的点的值+1(即本节点值+1)，防止重复行走，并把走过的点压入堆栈(表示路径)，如果遇到墙、或者已走过的点则不能前进，如果前方已经无路可走，则返回，路径退栈，这样递归调...&nbsp;&nbsp;<a href='http://www.cppblog.com/humanchao/archive/2008/03/18/44783.html'>阅读全文</a><img src ="http://www.cppblog.com/humanchao/aggbug/44783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-03-18 17:47 <a href="http://www.cppblog.com/humanchao/archive/2008/03/18/44783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为二维数组循环赋值</title><link>http://www.cppblog.com/humanchao/archive/2008/03/04/43655.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Tue, 04 Mar 2008 02:30:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/03/04/43655.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/43655.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/03/04/43655.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/43655.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/43655.html</trackback:ping><description><![CDATA[曾经遇到一个为二维数组循环赋值的问题，即赋值后的二维数组为如下情形：<br><br><img src="http://www.cppblog.com/images/cppblog_com/humanchao/mat.JPG" border="0"><br><br>当时在网上找了一下答案，基本上都是1层大循环套4层小循环还实现的，感觉不够优雅。最近翻了一下数据结构的书，看到迷宫问题受到了一点启发，感觉同样是实现这个功能，如下代码要优雅一些：<br><span style="color: #000000;"><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>const&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ROW__&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br>const&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;COL__&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mat[ROW__][COL__];<br><br>struct&nbsp;Position<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;nRow;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nCol;<br>};<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;printMat(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mat[ROW__][COL__]);<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;Position&nbsp;offset[</span><span style="color: #000000;">4</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">0</span><span style="color: #000000;">].nRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">0</span><span style="color: #000000;">].nCol&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">1</span><span style="color: #000000;">].nRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">1</span><span style="color: #000000;">].nCol&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">2</span><span style="color: #000000;">].nRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">2</span><span style="color: #000000;">].nCol&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">3</span><span style="color: #000000;">].nRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;offset[</span><span style="color: #000000;">3</span><span style="color: #000000;">].nCol&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Position&nbsp;curPos;<br>&nbsp;&nbsp;&nbsp;&nbsp;curPos.nRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;curPos.nCol&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;mat[</span><span style="color: #000000;">0</span><span style="color: #000000;">][</span><span style="color: #000000;">0</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nOffset&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Position&nbsp;tempPos;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;ROW__</span><span style="color: #000000;">*</span><span style="color: #000000;">COL__;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;nOffset&nbsp;%&nbsp;4&nbsp;------&gt;&nbsp;右-&gt;下-&gt;左-&gt;上&nbsp;循环</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempPos.nRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;curPos.nRow&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;offset[nOffset&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">].nRow;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempPos.nCol&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;curPos.nCol&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;offset[nOffset&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">].nCol;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;&nbsp;&nbsp;tempPos.nRow&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;ROW__&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;tempPos.nRow&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;tempPos.nCol&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;COL__&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;tempPos.nCol&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;不超过边界</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;mat[tempPos.nRow][tempPos.nCol]&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;已经有值</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">--</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nOffset</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curPos&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tempPos;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat[curPos.nRow][curPos.nCol]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;printMat(mat);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><br>printMat函数这些就不提供了，它的功能是打印出这个数组。我上传了一下工程，有兴趣的朋友<a href="http://www.cppblog.com/Files/humanchao/LoopMat.rar">点此下载</a>。</span><br> <img src ="http://www.cppblog.com/humanchao/aggbug/43655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-03-04 10:30 <a href="http://www.cppblog.com/humanchao/archive/2008/03/04/43655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单链表逆序输出</title><link>http://www.cppblog.com/humanchao/archive/2008/02/29/43446.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Fri, 29 Feb 2008 03:43:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/02/29/43446.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/43446.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/02/29/43446.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/43446.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/43446.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"><span style="font-size: 14pt;">刚刚有人考了我一道题，逆序输出单链表：<br>我是这样答的（下面的代码为伪代码，不能通过编译）：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;printSList(slist&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pList)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(pList);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pList&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;str;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(pList)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;string(</span><span style="color: #000000;">*</span><span style="color: #000000;">pList)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;str;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pList&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;str.c_str());<br>}</span></div>
<br>后来他让我想一想还有没有更为简单的方法了，当时允许我上网，我用了几分钟到网上找了一下，没有找到更好的办法，如果先把链表逆序，再顺序输出时间复杂度更高。<br><br>我走出大楼以后，忽然想到，是递归呀，对是递归：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;printSList(slist&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pList)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(pList);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pList&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pList);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printSList(pList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pList);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>哎，人生中机会就是一瞬之间，错过不知道下一次又是什么时候。但只要做了就会收获，会一次比一次做的好。吃饭去了...<br>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: 宋体;"><br></span></p>
</span> </span><img src ="http://www.cppblog.com/humanchao/aggbug/43446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-02-29 11:43 <a href="http://www.cppblog.com/humanchao/archive/2008/02/29/43446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC中取得毫秒级的时间</title><link>http://www.cppblog.com/humanchao/archive/2008/02/27/43322.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Wed, 27 Feb 2008 02:42:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2008/02/27/43322.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/43322.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2008/02/27/43322.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/43322.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/43322.html</trackback:ping><description><![CDATA[1000毫秒为一秒，毫秒可能是能够取到的最小的时间单位了，代码如下：<br>
<p><br></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">DWORD&nbsp;startTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetTickCount();<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;do&nbsp;something<img src="http://www.cppblog.com/Images/dot.gif"></span><span style="color: #008000;"><br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">DWORD&nbsp;totalTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetTickCount()&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;startTime;</span></div>
<br>看到楼下两们仁兄的发言，我找了一下资料，如下的代码可以取得更为精确的时间值：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;取得时钟频率</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">LARGE_INTEGER&nbsp;&nbsp;litmp&nbsp;;<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">QueryPerformanceFrequency(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">litmp);<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">LARGE_INTEGER&nbsp;&nbsp;start;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">QueryPerformanceCounter(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">start)&nbsp;;&nbsp;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">do&nbsp;something<img src="http://www.cppblog.com/Images/dot.gif"></span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">LARGE_INTEGER&nbsp;&nbsp;end;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">QueryPerformanceCounter(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">end)&nbsp;;&nbsp;<br></span><span style="color: #008080;">12</span> <br><span style="color: #000000;"></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;dTotalTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">double</span><span style="color: #000000;">)(end.QuadPart</span><span style="color: #000000;">-</span><span style="color: #000000;">start.QuadPart)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">double</span><span style="color: #000000;">)litmp.QuadPart;</span>&nbsp;&nbsp;&nbsp; //秒<br><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;"></span></div>
<br> <img src ="http://www.cppblog.com/humanchao/aggbug/43322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2008-02-27 10:42 <a href="http://www.cppblog.com/humanchao/archive/2008/02/27/43322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么样把一堆数平均分成N份</title><link>http://www.cppblog.com/humanchao/archive/2007/12/29/39934.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Sat, 29 Dec 2007 07:52:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2007/12/29/39934.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/39934.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2007/12/29/39934.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/39934.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/39934.html</trackback:ping><description><![CDATA[一年半之前，我遇到一个问题：把一堆数平均分成N份，保证每一份的和接近于所有数之和除以N，不要求平分以后的每份数据个数相等。这是有现实的程序设计需求的，当时是3份。首先想到要先进行排序，再依次从已排序的数列中抽取，如何进行抽取方法有很多，我大概想了3种左右，感觉要拿一些数据去测试一下这几种方法哪一种可以逼近最优解。<br><br>当时经理要求算法一定能够得出最优解，但测试多组数据，没有发现哪一种实现能得到最优解。后来翻了一下<a href="http://product.dangdang.com/product.aspx?product_id=88138">《<span class=black000><strong>数据结构、算法与应用--C++语言描述</strong></span>》</a>，忽然想到，原来这个是一个典型贪婪算法问题，这个问题没有最优解，用贪婪算法来解决这个问题可以让每一次结果逼近最优。实现如下(注：代码是我今天写的)：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">typedef&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntVector;<br>typedef&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">IntVector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;IntMat;<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;DeuceNumber(const&nbsp;IntVector&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">SourceVecNum,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nShare,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntMat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">OutVecVecNum)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;IntVector&nbsp;copySourceNum&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SourceVecNum;<br>&nbsp;&nbsp;&nbsp;&nbsp;sort(copySourceNum.begin(),&nbsp;copySourceNum.end(),&nbsp;greater</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">());<br><br>&nbsp;&nbsp;&nbsp;&nbsp;IntVector&nbsp;sum(nShare);<br>&nbsp;&nbsp;&nbsp;&nbsp;OutVecVecNum.resize(nShare);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;copySourceNum.size();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nMinSumPos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;min_element(sum.begin(),&nbsp;sum.end())&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;sum.begin();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutVecVecNum[nMinSumPos].push_back(copySourceNum[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[nMinSumPos]&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;copySourceNum[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>我上传了一个VC的测试工程，有兴趣的朋友<a href="http://www.cppblog.com/Files/humanchao/DeuceNumber.rar">点此下载</a>。<br><br>理论的依据不仅指导了实践的选择，同时给选择以有力的支撑。<br><br>2007年就要结束了，在此预祝大家在新的一年里：身体健康，平安如意！<br>
<img src ="http://www.cppblog.com/humanchao/aggbug/39934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2007-12-29 15:52 <a href="http://www.cppblog.com/humanchao/archive/2007/12/29/39934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC中怎么执行一个应用程序，并取得应用程序的返回值</title><link>http://www.cppblog.com/humanchao/archive/2007/12/28/39815.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Fri, 28 Dec 2007 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2007/12/28/39815.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/39815.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2007/12/28/39815.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/39815.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/39815.html</trackback:ping><description><![CDATA[<p><br>假设需要执行的程序如下：<br></p>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;argc;<br>}</span></div>
<br><br>执行它，并取得其返回值，我写了一个函数如下：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WinExecAndWait32(&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;lpszAppPath,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;执行程序的路径</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;lpParameters,&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;参数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;lpszDirectory,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;执行环境目录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwMilliseconds)&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;最大等待时间,&nbsp;超过这个时间强行终止</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;SHELLEXECUTEINFO&nbsp;ShExecInfo&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.cbSize&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sizeof(SHELLEXECUTEINFO);<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.fMask&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SEE_MASK_NOCLOSEPROCESS;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.hwnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.lpVerb&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.lpFile&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lpszAppPath;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.lpParameters&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lpParameters;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.lpDirectory&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lpszDirectory;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.nShow&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SW_HIDE;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShExecInfo.hInstApp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShellExecuteEx(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ShExecInfo);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;指定时间没结束</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="CO