⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_66531.htm

📁 vc
💻 HTM
字号:
<p>
序号:66531 发表者:ljl 发表日期:2003-12-25 09:41:06
<br>主题:数据排列组合问题
<br>内容:n个自然数中r个数的组合,要求数不相同,递减排列。如:n = 5, r = 3, 所有组合为:<BR><BR>5&nbsp;&nbsp; 4&nbsp;&nbsp; 3<BR>5&nbsp;&nbsp; 4&nbsp;&nbsp; 2<BR>5&nbsp;&nbsp; 4&nbsp;&nbsp; 1<BR>5&nbsp;&nbsp; 3&nbsp;&nbsp; 2<BR>5&nbsp;&nbsp; 3&nbsp;&nbsp; 1<BR>5&nbsp;&nbsp; 2&nbsp;&nbsp; 1<BR>4&nbsp;&nbsp; 3&nbsp;&nbsp; 2<BR>4&nbsp;&nbsp; 3&nbsp;&nbsp; 1<BR>4&nbsp;&nbsp; 2&nbsp;&nbsp; 1<BR>3&nbsp;&nbsp; 2&nbsp;&nbsp; 1<BR><BR>看到一本书上用递归法的程序如下:<BR><BR>#include &lt;stdio.h&gt;<BR><BR>//递归法<BR>void comb( int n, int r )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for( i = n; i &gt;= r; i-- )<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//看不明白这一段,k如何在外部定义?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(( i != n) &amp;&amp; ( k != r ))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//k为过程外定义的<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int temp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( temp = 1; temp &lt;= ( k - r ) * 3; temp++ )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34; &#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;&nbsp;&nbsp;%3d&#34;, i );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( r &gt; 1 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comb( i - 1, r - 1 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//递推到i-1个数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34; \n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>main()<BR>{<BR>//&nbsp;&nbsp;&nbsp;&nbsp;int a, b;<BR>//&nbsp;&nbsp;&nbsp;&nbsp;scanf( &#34;%d %d&#34;, &amp;a, &amp;b );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;comb( 5, 3 );<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:ljl 回复日期:2003-12-25 11:11:05
<br>内容://解决后方案,送分唠~~~~<BR><BR>#include &lt;stdio.h&gt;<BR><BR>int k; //全局变量,保存最原始的每行个数r(不是迭代过程中的)<BR><BR>//递归法<BR>void comb( int n, int r )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int i;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;for( i = n; i &gt;= r; i-- )<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打印和上一行相同部分的位置为空格<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(( i != n) &amp;&amp; ( k != r ))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//k为过程外定义的<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( temp = 1; temp &lt;= ( k - r ) * 3; temp++ )//这里的3是对应的printf(&#34;%3d&#34;, i );中的3<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34; &#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%3d&#34;, i );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( r &gt; 1 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comb( i - 1, r - 1 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//递推到i-1个数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34; \n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int a, b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;scanf( &#34;%d %d&#34;, &amp;a, &amp;b );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;k = b;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;comb( a, b );&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:Cxt_ann 回复日期:2003-12-25 11:12:19
<br>内容:收藏收藏:)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:林建华 回复日期:2003-12-25 11:14:10
<br>内容:好像少打出来点东西
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ljl 回复日期:2003-12-25 13:16:52
<br>内容:&lt;BLOCKQUOTE&gt;引用“第3楼”所言<BR>&lt;Q&gt;好像少打出来点东西&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR><BR>的确,我在考虑如何打印出相同的部分ing~~~
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:林建华 回复日期:2003-12-25 13:21:35
<br>内容:用个数组存,最后在<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( r &gt; 1 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comb( i - 1, r - 1 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//递推到i-1个数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;一起打印,其他地方不打印
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ljl 回复日期:2003-12-25 15:18:30
<br>内容://调了半天,才通过:((<BR><BR>#include &lt;stdio.h&gt;<BR><BR>int k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//全局变量,保存最原始的每行个数r<BR>int one[5] ;&nbsp;&nbsp;&nbsp;&nbsp;//保存“相同”的数<BR>int count = 0;&nbsp;&nbsp;&nbsp;&nbsp;//必须在这里初始化!!!<BR><BR>//递归法<BR>void comb( int n, int r )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int i;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;for( i = n; i &gt;= r; i-- )<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(( i != n) &amp;&amp; ( k != r ))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//k为过程外定义的<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( temp = 0; temp &lt;=&nbsp;&nbsp;k - r - 1 ; temp++ )//打印重合的部分<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%3d&#34;, one[temp]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;%3d&#34;, i );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( count &lt; k - 1 ) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one[count] = i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( r &gt; 1 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comb( i - 1, r - 1 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//递推到i-1个数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;count--;&nbsp;&nbsp;&nbsp;&nbsp;//退一级相应的就减1,“腾”出相应的临时数组位置存放对应的i<BR>}<BR><BR>main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int a, b;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;自然数的个数a: &#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;scanf( &#34;%d&#34;, &amp;a );<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;请输入组合数: &#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;scanf( &#34;%d&#34;, &amp;b );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;k = b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;\n对应的排列如下\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;----------------\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;comb( a, b );<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;\n&#34;);<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:林建华 回复日期:2003-12-25 15:31:25
<br>内容::)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -