数学建模社区-数学中国

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

作者: 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;}
( a- _2 s; ~1 s$ }
}

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 );
( ^, e# s( a( R! E1 D8 Y$ a
Perm( e,k + 1, m,b,k1,m1 ) ;

Swap( e[k], e );

}
}
}

else
{

; U# u' A& B: g1 J$ G
0 e" ` `$ [% r
for ( int j= k1; j<= m1; j ++)
{

Swap( b[k1],b[j] );
) D( N5 B N0 c! g
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;
}
" h q& G. ~" H8 g2 c1 k9 a
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();

4 c: a( h+ {) `
) q6 m4 b/ q V, g8 T4 H
}


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




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