十二:全排列-求解密碼
阿新 • • 發佈:2017-12-29
英文 計算 har tdi font scanf 需要 tr1 顯示
問題:全排列-求解密碼
題目描述
有某個系統需要密碼才可以進入,現已知密碼中的字符組合為字符串s中的字符(s<=6,s中的每一個字符都是英文字母,沒有數字),但不知其排列順序,請你編寫程序,顯示出該字符串中元素的所有組合(註意:會出現重復情況)
如果您采用哈希函數來消除重復,請使用如下公式來計算哈希值:
result = s[i] + (result << 6) + (result << 16) - result;
result = result & 0x7fffffff;
輸入
一個字符串
輸出
該字符串的所有組合
樣例輸入
abcc
樣例輸出
abcc acbc accb bacc bcac bcca cabc cacb cbac cbca ccab ccba
1 #include<stdio.h> 2 #include<string.h> 3 char str1[1000][10]; 4 int y=0; 5 void fun(char str[],int k){ 6 int i,j; 7 char t; 8 if(k==strlen(str)){ 9 int a=y; 10 int h=0; 11 while(a--&&!strlen(str1[y])) 12 if(!strcmp(str,str1[a])){13 h++; 14 break; 15 } 16 if(!h) 17 printf("%s ",str); 18 strcpy(str1[y++],str); 19 } 20 for(i=k;i<strlen(str);i++){ 21 t=str[i]; 22 for( j=i-1 ; j>=k ; j-- ) 23 str[j+1]=str[j];24 str[k]=t; 25 fun(str,k+1); 26 t=str[k]; 27 for( j=k ; j<=i ; j++) 28 str[j]=str[j+1]; 29 str[i]=t; 30 } 31 } 32 int main(){ 33 char str[7]; 34 scanf("%s",str); 35 fun(str,0); 36 return 0; 37 }
十二:全排列-求解密碼