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中

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/37556.html