input.txt文件输入,第一行是待排元素个数,第二行是待排元素
4
aacc
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int s=0; //排列个数
void pailie(char x[],int k,int m,FILE* out) //递归排列+输出
{
int i,j,c=0;
char t;
if(k==m) //排列一个->直接输出
{
s++; //排列个数++
for(i=0;i<=m;i++)
{
fprintf(out,"%c",x[i]); //文件输出
printf("%c",x[i]); //输出
}
fprintf(out,"\n"); //文件输出
printf("\n"); //输出
}
else
{
for(i=k;i<=m;i++) //从头开始,到m排列
{
c=0; //标志
for(j=k;j<i;j++) //如果前面有相同的字母(重复元素)
{
if(x[j]==x[i])
{
c=1; //找到了,标志一下
break;
}
}
if(c) //有重复的元素,跳过
continue;
t=x[k];x[k]=x[i];x[i]=t; //交换
pailie(x,k+1,m,out); //递归
t=x[k];x[k]=x[i];x[i]=t; //换回
}
}
}
int main(){
int n=0,i;
FILE *in=fopen("input.txt","r"); //读文件
if(in==NULL)
{
printf("缺少文件‘input.txt’");
exit(0);
}
fscanf(in,"%d",&n); //字母个数
char x[n+5];
fscanf(in,"%s",x); //读字母字符串
fclose(in); //关文件
FILE *out=fopen("output.txt","w+"); //创文件
pailie(x,0,n-1,out); //排列+输出文件
printf("%d",s); //输出排列个数
fprintf(out,"%d",s); //文件输出排列个数
fclose(out); //关文件
return 0;
}
结果会保存到output.txt中