64,662
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int LENGTH; //数组的长度
int Line=1; //用来作输出的格式控制标志
int TOTAL=0; //全排列的总数
char *Array; //用来辅助输出的全局数组
void Swap(char &ch1, char &ch2); //交换两个单元的值的函数
void ArraySort(char array[], int n); //进行全排列的递归函数
void main()
{
//得到数组长度
cout<<"请输入数组的长度(建议>1 && <10): ";
cin>>LENGTH;
//得到格式化输出标志
for ( int j=2; j<LENGTH; j++ )
Line*=j;
//数组的初始化
Array=new char[LENGTH+1];
char *array=new char[LENGTH];
for ( int i=0; i<LENGTH; i++ )
array[i]='A'+i;
//调用递归函数并输出
ArraySort( array, LENGTH );
cout<<"\nTotal:"<<TOTAL<<endl<<endl;
delete [] Array;
delete [] array;
//system("pause");
}
void Swap(char &ch1, char &ch2)
{
ch1+=ch2;
ch2=ch1-ch2;
ch1-=ch2;
}
void ArraySort(char array[], int n)
{
//递归的终止点,只要数组中的元素个数为1,则结束递归并输出一个排列
if ( n==1 )
{
Array[LENGTH-n]=array[0]; //将数组中的最后一个元素放入输出数组
Array[LENGTH]='\0';
cout<<Array<<'\t';
TOTAL++;
if ( !(TOTAL%Line) )
cout<<"\n--------------\n";
return ;
}
//为了保证初始数组array不变,构建临时数组T_array代替
char *T_array=new char[n];
for ( int i=0; i<n; i++ )
{
//将array数组赋给T_array
int j;
if ( i==1 )
goto Nochange;
for ( j=0; j<n; j++ )
T_array[j]=array[j];
if ( i==0 )
{
Array[LENGTH-n]=T_array[0];
ArraySort( &T_array[1], n-1 );
continue;
}
Nochange:
//将数组中第一个元素与第i元素交换,并放入输出数组中,达到排列的目的
Swap( T_array[0], T_array[i] );
Array[LENGTH-n]=T_array[0];
//调用递归函数进行除T_temp[0]外所有函数的全排列
ArraySort( &T_array[1], n-1 );
}
delete [] T_array; //释放临时数组T_array,防止泄漏
}
#include <stdio.h>
int N,M,k,total;
char lword[]="abc",word[3];
void Chose(int a1,int a2)
{
int i;
if(0==a2){
for(i=0;i<M;i++)
printf("%d",word[i]);
printf("\n");
total++;
return;}
for(i=1;i<=N;i++)
{
word[k++]=i;
Chose(a1+1,a2-1);
k--;
}
}
int main(void)
{
M=5;
N=5;
Chose(1,5);
printf("total=%d\n",total);
getchar();
return 0;
}