1. 程式人生 > >十二:全排列-求解密碼

十二:全排列-求解密碼

英文 計算 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 }

十二:全排列-求解密碼