例题4-1 古老的密码 UVa1339

算法竞赛入门经典(第2版)第4章 函数和递归

例题4-1 古老的密码 UVa1339
感悟。

1、阅读书中题目,对映射方式(B->A,C->B,...,Z->Y),印象深刻,马上编码。

2、但有一组测试样例无法通过,如下。

HAHA

HEHE

YES
3、上网站下载英文原题,对照翻译软件查单词,仔细阅读。只读出替换字母打乱顺序,加密方式比较强劲,其他没读出个所以然。

4、参考http://blog.csdn.net/thudaliangrx/article/details/50700688代码,跟踪调试,才明白了,字母替换只要满足同样的字母用另一个同样的字母替换就可以了,没有其他顺序上的要求。

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;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值