排列组合算法问题
题目是:<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. <p>#include<iostream.h><br/>#include <conio.h><br/>#include<math.h></p><p>void Swap ( int &a ,int & 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<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<=m;j++)<br/> {<br/> cout<<e<<" ";<br/> }<br/> cout<<endl;<br/> }<br/> }<br/> else<br/> {<br/> for ( int i = k; i <= 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<= 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<<"请输入一个大于2的偶数n:\n";<br/> cin>>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<=n;i++)<br/> {<br/> e=c*(i+1)/2;<br/> c=-c;<br/> }<br/>
<br/> for(j=1;j<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<<endl<<"敲任意键(除回车键)退出..."<<endl;<br/> getch();</p><p>
<br/>
<br/>}</p> 非常感谢分享 我可以改进哦
页:
[1]