例題4-1 古老的密碼 UVa1339
演算法競賽入門經典(第2版)第4章 函式和遞迴
例題4-1 古老的密碼 UVa1339
感悟。
1、閱讀書中題目,對對映方式(B->A,C->B,...,Z->Y),印象深刻,馬上編碼。
2、但有一組測試樣例無法通過,如下。
HAHA
HEHE
YES
3、上網站下載英文原題,對照翻譯軟體查單詞,仔細閱讀。只讀出替換字母打亂順序,加密方式比較強勁,其他沒讀出個所以然。
5、重新編碼,用了氣泡排序,按字母頻度由小到大排列,提交AC。
附上程式碼
環境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
char s[100+10],t[100+10];
int cnts[26+10],cntt[26+10];//統計字母出現頻率
void bubblesort(int *cnt){//自小到大排序
int i,j;
int len=26;
int t;
for(i=0;i<len;i++)
for(j=i+1;j<len;j++)
if(cnt[i]>cnt[j]){
t=cnt[i];
cnt[i]=cnt[j];
cnt[j]=t;
}
}
int main(){
int i;
int slen;
int k;
int len=26;
while(scanf("%s%s",s,t)!=EOF){
slen=strlen(s);
k=s[0]-t[0];
memset(cnts,0,sizeof(cnts));
memset(cntt,0,sizeof(cntt));
for(i=0;i<slen;i++){//統計字母出現頻度
cnts[s[i]-'A']++;
cntt[t[i]-'A']++;
}
bubblesort(cnts);
bubblesort(cntt);
for(i=0;i<len;i++)//兩個字串出現頻度是否一致
if(cnts[i]!=cntt[i])
break;
if(len==i)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}