求全排列1-9的一份思路 算法思路,
如题,想了两天了,没开始接触算法,在学校里只学了C的一点基础,望有大神想交此算法思路
#include <stdio.h> //A(n,m),m<=n int f(int n,int m) { int i,a=1,b=1; //n! for(i=1;i<=n;i++) { a*=i; } //(n-m)! for(i=1;i<=n-m;i++) { b*=i; } return a/b; //n!/(n-m)! } int main() { int n=10,m=6; printf("A(%d,%d)=%d\n",n,m,f(n,m)); return 0; }
#include <stdio.h> #include <stdlib.h> #include<ctype.h> int cd(int m[],int num1) { int k,l; l=0; if(num1==8){ printf("%d%d%d%d%d%d%d%d%d\n",m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],m[8]); return 0; } else{ cd(m,num1+1); l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } l++; if((num1+l)<=8){ k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; cd(m,num1+1); k=m[num1]; m[num1]=m[num1+l]; m[num1+l]=k; } return 0; } } int main() { int j,num,i[9]; num=0; for(j=0;j<9;j++) i[j]=j+1; cd(i,num); }
[此贴子已经被作者于2016-4-19 04:20编辑过]
#include <stdio.h> int _GetNext(int n[]) { int i, j, tmp; printf("%d%d%d%d%d%d%d%d%d\n", n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8]); for(i=0; i<8; i++) { if (n[i] < n[i+1]) { break; } } if (i > 7) { return 0; } for (j=0; j<=i; j++) { if (n[j] < n[i+1]) { tmp = n[j]; n[j] = n[i+1]; n[i+1] = tmp; break; } } for(j=0; j<=(i/2); j++) { tmp = n[j]; n[j] = n[i-j]; n[i-j] = tmp; } return 1; } int main() { int n[]={1,2,3,4,5,6,7,8,9}; while (_GetNext(n)); }