数学建模社区-数学中国

标题: 排列组合算法问题 [打印本页]

作者: sir_tian    时间: 2008-5-3 00:14
标题: 排列组合算法问题
题目是:
输入一个偶数2k,输出满足下列条件的数:
e[1]+e[2]=
e[2]+e[3]+e[2k]=
e[3]+e[4]=
e[4]+e[5]=
e[5]+e[6]=
.....
e[2k-2]+e[2k-1]=
e[2k-1]+e[2k]+e[1]=
其中e在{-1,1,2,-2,...k,-k}取值
等号右面的数在{0,-1,1,-2,2,...-(k-1),k-1}中取值。
例:(当输入的偶数为2k=8时)
e1=-1;
e2=3;
e3=4;
e4=-3;
e5=1;
e6=-2;
e7=2;
e8=-4.
作者: sir_tian    时间: 2008-5-3 16:52

#include<iostream.h>
#include <conio.h>
#include<math.h>

void Swap ( int &a ,int & b)

{

int temp = a; a = b; b = temp;

}
void Perm(int e[], int k, int m,int b[],int k1,int m1)
{
if( k1== m1 )
{
if(k==m)
{
int flag,i;
for( i=3;i<m-1;i++)
{
if ((e+e[i+1])==b) {flag=1;continue;}else {flag=0;break;}
# G! I! [# A- c9 m! c) ^' _" X" t
}

if (i==m-1)
if((e[1]+e[2])==b[1])
if((e[m-1]+e[m]+e[1])==b[m-1]){
for(int j=1;j<=m;j++)
{
cout<<e[j]<<" ";
}
cout<<endl;
}
}
else
{
for ( int i = k; i <= m; i ++)
{

Swap( e[k],e );
# A7 r6 X7 ?6 M% w5 O
Perm( e,k + 1, m,b,k1,m1 ) ;

Swap( e[k], e );

}
}
}

else
{

/ ~/ _0 h- [- g4 K. F
2 K& d& D9 W& w5 Q
for ( int j= k1; j<= m1; j ++)
{

Swap( b[k1],b[j] );
; L4 |9 i+ f5 U- m( V3 U
Perm( e,k , m,b,k1+1,m1 ) ;

Swap( b[k1], b[j] );

}


}

}

void main()
{
int n,c=-1,d=1,i,j;
cout<<"请输入一个大于2的偶数n:\n";
cin>>n;
int e[20];
int b[20];
/* e[1]=6;
e[2]=-1;
e[3]=5;
e[4]=-2;
e[5]=4;
e[6]=-3;
e[7]=3;
e[8]=-4;
e[9]=2;
e[10]=-5;
e[11]=1;
e[12]=-6;*/
for(i=1;i<=n;i++)
{
e=c*(i+1)/2;
c=-c;
}
, R4 D0 Q7 b# U4 \+ N- f) f" O" f
for(j=1;j<n;j++)
{
b[j]=d*(j/2);
d=-d;
}
int m1=n-1;
int m=n;
int k=1;int k1=1;
Perm(e,k,m,b,k1,m1);
cout<<endl<<"敲任意键(除回车键)退出..."<<endl;
getch();

5 g7 H9 ~2 S3 q0 S+ P% M
, U! a* N% `/ s D* C: X( {/ [
}


作者: gssdzc    时间: 2010-6-14 12:15
非常感谢分享
作者: 自强君子    时间: 2010-8-9 23:59
我可以改进哦




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5