可能要用过全排列算法吧?把所有可能的组合实现出来,任选一种就可以了,给你一个STL全排列算法:
next_purmutation
自己写的话:
template < typename T >
bool _next_permutation( T *first, T *last );
#define N 8
int main(int argc, char* argv[])
{
int i;
int y = 1;//序号
char a[N];
for ( i=0; i<N; i++ )
{
a[i] = i + 1 + 64 + 32;
}
template < typename T >
bool _next_permutation( T *first, T *last )
{
int i;
int j;
int x = -1;
int rang = last - first;
//从左向右找最后一个左边数小于右边数的位置,记为x
for ( i=0; i<rang-1; i++ )
{
if ( *( first+i ) <= *( first+i+1 ) )
{
x = i;
}
}
if ( x != -1 )
{
//从上面的x位置到最后,找最后一个比a[x]大的数的位置,记为j,如果没有,j等于x
for ( i=x; i<rang; i++ )
{
if ( *( first+x ) <= *( first+i ) )
{
j = i;
}
}
//把上面x后一个位置到最后的数列逆置
for ( i=x+1; i<rang; i++ )
{
if ( i != rang + x - i )
{
int nSwap = rang + x - i;
_swap( *( first+i ), *( first+ ( rang+x-i ) ) );
}
if ( ( i + 1 ) * 2 > rang + x )
{
break;
}
}
}
if ( -1 == x ) return false;
else return true;
}
template < typename T >
void _swap( T &a, T &b )
{
a = a + b;
b = a - b;
a = a - b;
}