问题描述:
问题一:全排列
输入一个数n,输出1-n的全排列
样例:
输入:3
输出:123,132,213,231,312,321
样例代码
1 #include<stdio.h> 2 int a[10], book[10], n; 3 4 void dfs(int step) { 5 int i; 6 if(step == n+1) { 7 for(i = 1; i <= n; i++) 8 printf("%d", a[i]); 9 printf("\n"); 10 return; 11 } 12 13 for(i = 1; i <= n; i++) { 14 if(book[i] == 0) { 15 a[step] = i; 16 book[i] = 1; 17 dfs(step+1); 18 book[i] = 0; 19 } 20 } 21 return; 22 } 23 24 int main(){ 25 scanf("%d", &n); 26 dfs(1); 27 return 0; 28 }
问题二:暴力枚举
abc+def=ghi
a,b,c,d,e,f,g,h,i分别为1-9的数字,每个数字只出现一次
样例代码
1 #include<stdio.h> 2 int a[10], book[10], total; 3 4 void dfs(int step) { 5 int i; 6 if(step == 10) 7 { 8 if(a[1]*100 + a[2]*10 + a[3] + a[4]*100 + a[5]*10 + a[6] == a[7]*100 + a[8]*10 + a[9]) 9 { 10 total++; 11 printf("%d%d%d + %d%d%d = %d%d%d\n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]); 12 } 13 return ; 14 } 15 for(i = 1; i <= 9; i++) { 16 if(book[i] == 0) { 17 a[step] = i; 18 book[i] = 1; 19 dfs(step+1); 20 book[i] = 0; 21 } 22 } 23 return ; 24 } 25 26 int main(){ 27 dfs(1); 28 printf("total = %d\n", total/2); 29 return 0; 30 }