全排列 题目本身没有难度
注意在函数循环里面,是走1-n,不是1-x。可执行的范围是1-n
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; int countnum=0; int ans[100]; bool hashTable[1000]; int n; void qpl(int x) { /*if(x==n+1) { for(int j=1;j<=n;j++) printf("%d ",ans[j]); printf(" "); countnum++; return; }*/ for(int i=1;i<=n;i++) { if(hashTable[i]==false) { if(x==n) { for(int j=1;j<=n-1;j++) printf("%d ",ans[j]); printf("%d ",i); countnum++; return ; } ans[x]=i; hashTable[i]=true; //printf("x:%d i:%d ",x,i); qpl(x+1); hashTable[i]=false; } } } int main() { memset(hashTable,0,sizeof(hashTable)); memset(ans,0,sizeof(ans)); scanf("%d",&n); qpl(1); printf("%d ",countnum); printf("finish"); return 0; }