sir_tian 发表于 2008-5-3 00:14

排列组合算法问题

题目是:<br/>输入一个偶数2k,输出满足下列条件的数:<br/>e+e=<br/>e+e+e=<br/>e+e=<br/>e+e=<br/>e+e=<br/>.....<br/>e+e=<br/>e+e+e=<br/>其中e在{-1,1,2,-2,...k,-k}取值<br/>等号右面的数在{0,-1,1,-2,2,...-(k-1),k-1}中取值。<br/>例:(当输入的偶数为2k=8时)<br/>e1=-1;<br/>e2=3;<br/>e3=4;<br/>e4=-3;<br/>e5=1;<br/>e6=-2;<br/>e7=2;<br/>e8=-4.

sir_tian 发表于 2008-5-3 16:52

<p>#include&lt;iostream.h&gt;<br/>#include &lt;conio.h&gt;<br/>#include&lt;math.h&gt;</p><p>void Swap ( int &amp;a ,int &amp; b)</p><p>{</p><p>         int temp = a; a = b; b = temp;</p><p>}<br/>void Perm(int e[], int k, int m,int b[],int k1,int m1)<br/>{<br/>    if( k1== m1 )<br/> {<br/>  if(k==m)<br/>  {<br/>   int flag,i;<br/>   for( i=3;i&lt;m-1;i++)<br/>   {<br/>     if ((e+e)==b)  {flag=1;continue;}else {flag=0;break;}<br/>
                <br/>   }</p><p>      if (i==m-1)<br/>    if((e+e)==b)<br/>     if((e+e+e)==b){<br/>   for(int j=1;j&lt;=m;j++)<br/>     {<br/>      cout&lt;&lt;e&lt;&lt;" ";<br/>     }<br/>   cout&lt;&lt;endl;<br/>        }<br/>  }<br/>  else<br/>  {<br/>    for ( int i = k; i &lt;= m; i ++)<br/>    {</p><p>                  Swap( e,e );<br/>
                <br/>                  Perm( e,k + 1, m,b,k1,m1 ) ;</p><p>                  Swap( e, e );</p><p>    }<br/>  }<br/>    }</p><p>    else<br/> {</p><p>
                <br/>
                <br/>        for ( int j= k1; j&lt;= m1; j ++)<br/>  {</p><p>           Swap( b,b );<br/>
                <br/>           Perm( e,k , m,b,k1+1,m1 ) ;</p><p>         Swap( b, b );</p><p>         }</p><p><br/>    }</p><p>}</p><p>void main()<br/>{<br/> int n,c=-1,d=1,i,j;<br/> cout&lt;&lt;"请输入一个大于2的偶数n:\n";<br/> cin&gt;&gt;n;<br/> int e;<br/> int b;<br/>/* e=6;<br/> e=-1;<br/> e=5;<br/> e=-2;<br/> e=4;<br/> e=-3;<br/> e=3;<br/> e=-4;<br/> e=2;<br/> e=-5;<br/> e=1;<br/> e=-6;*/<br/>    for(i=1;i&lt;=n;i++)<br/> {<br/>  e=c*(i+1)/2;<br/>  c=-c;<br/> }<br/>
                <br/> for(j=1;j&lt;n;j++)<br/> {<br/>  b=d*(j/2);<br/>  d=-d;<br/> }<br/> int m1=n-1;<br/> int m=n;<br/> int k=1;int k1=1;<br/> Perm(e,k,m,b,k1,m1);<br/>    cout&lt;&lt;endl&lt;&lt;"敲任意键(除回车键)退出..."&lt;&lt;endl;<br/> getch();</p><p>
                <br/>
                <br/>}</p>

gssdzc 发表于 2010-6-14 12:15

非常感谢分享

自强君子 发表于 2010-8-9 23:59

我可以改进哦
页: [1]
查看完整版本: 排列组合算法问题