题目:给定两个长度相同且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,然后对26个字母做一个一一映射,使得两个字符串相同。例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后把每个字母映射到它前一个字母(B->A, C->B, ..., Z->Y, A->Z),得到VICTORIOUS。输入两个字符串,输出YES或者NO。
分析:(这里只考虑str1作为待转换字符串和str2目标字符串(也可以两者角色不同),数组分为cnt1和cnt2)由于字母可以排序,我们就可以不用考虑字母的顺序。直接比较两个字符串各个字母出现的个数。将两个字符串进行排序后,用数组保存每个字母出现的次数。然后对两个数组进行比较。由于str1映射到str2,所以,在cnt1[1]与cnt2[0]比较,后面依次比较。
代码如下:
#include <stdio.h>
#include <string.h>
// 对字符串进行排序
void sortStr(char str[])
{int i, j;char ch; for (i=0; i<strlen(str)-1; i++) {for (j=0; j<strlen(str)-i-1; j++) {if (str[j]>str[j+1]) {ch = str[j];str[j] = str[j+1];str[j+1] = ch;}}}
}
// 计算字母出现的次数
void calculate(int cnt[], char str[])
{int i;for (i=0; i<strlen(str); i++)cnt[str[i]-65]++;
}
// 判断是否可以转换
int judge(int cnt1[], int cnt2[])
{int i, j, flag = 0;// cnt1[1]与cnt2[0]比较,后面依次比较 for (i=0, j=1; i<26; i++, j++) {if (j == 26) j = 0;if (cnt1[j] == cnt2[i]) flag++;}if (flag == 26) return 1; // 当flag=26,代表可以转换 return 0;
}int main()
{char str1[100], str2[100];int cnt1[26] = {0}, cnt2[26] = {0};gets(str1);gets(str2);sortStr(str1);sortStr(str2);calculate(cnt1, str1);calculate(cnt2, str2);if (judge(cnt1, cnt2)) printf("Yes\n");else printf("No\n");return 0;} 

例题4-1 古老的密码(Ancient Cipher, NEERC 2004, UVa1339)相关推荐

  1. UVA1339 古老的密码 Ancient Cipher 排序

    UVA1339 古老的密码 Ancient Cipher 题目描述 古罗马帝国有一个拥有各种部门的强大政府组织.其中一个部门就是保密服务部门.为了保险起见,在省与省之间传递的重要文件中的大写字母是加密 ...

  2. 《算法竞赛入门经典》 例题 4-1 古老的密码(Ancient Cipher) UVa 1339

    题目描述 给定两个长度相同且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,然后对26个字母做一个一一映射,使得两个字符串相同. 例如,JWPUDJSTVP重排后可以得到WJDUPSJ ...

  3. 例题 4-1 古老的密码(Ancient Cipher) UVa 1339

    题目:古老的密码 题目描述: 给定两个长度一样且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,之后对26个字母做一个一一映射,使得两个字符串相同 例如,JWPUDJSTVP重排后可以 ...

  4. 例题4-1 UVA1339 古老的密码 Ancient Cipher

    输入两个串,问能不能按照一定规则映射.但是怎么映射没说,其实就是统计两个字符串各个字母出现的次数,然后分别对这两个次数序列排序,看看排完之后的两个序列是不是相同,就可以判断了, #include &l ...

  5. UVA1339 古老的密码 Ancient Cipher 题解

    题意翻译 [题目描述] 古罗马帝国有一个拥有各种部门的强大政府组织.其中一个部门就是保密服务部门.为了保险起见,在省与省之间传递的重要文件中的大写字母是加密的.当时最流行的加密方法是替换和重新排列. ...

  6. 例题4-1 古老的密码 UVa1339

    算法竞赛入门经典(第2版)第4章 函数和递归 例题4-1 古老的密码 UVa1339 感悟. 1.阅读书中题目,对映射方式(B->A,C->B,...,Z->Y),印象深刻,马上编码 ...

  7. 现代密码学1.3--古典密码/historical cipher

    现代密码学1.3--古典密码/historical cipher Caesar's cipher/凯撒密码 The shift cipher/移动密码 The mono-alphabetic subs ...

  8. C++希尔密码Hill Cipher算法(附完整源码)

    希尔密码Hill Cipher的算法 希尔密码(Hill Cipher) 的算法的完整源码(定义,实现,main函数测试) 希尔密码(Hill Cipher) 的算法的完整源码(定义,实现,main函 ...

  9. UVA - 1339 ​​​​​​​Ancient Cipher

    Ancient Cipher UVA - 1339 题目传送门 解决方法:模拟一下转换过程即可. AC代码: #include <cstdio> #include <iostream ...

最新文章

  1. 【windows】cmd中的help无法使用的解决方法
  2. (六)java多线程之ReadWriteLock
  3. 【Mysql】纯sql报表
  4. 磁金融宣布完成1.2亿元B轮融资,宽带资本领投
  5. Debug system:无法显示数据
  6. 【STM32】 Keil介绍、下载、安装与注册
  7. 微博客之后有可能是“切客”
  8. Golang list双向链表源码走读
  9. PythonBasics 中文系列教程 · 翻译完成
  10. jsp九大内置对象和四种属性范围介绍
  11. 计算机网络自上而下影印版_《计算机网络(影印版)》 影印 【正版电子纸书阅读_PDF下载】- 书问...
  12. 宝马与intel合作 2021年推全自动无人驾驶车
  13. 昨天面试了两个小姑娘,都是项目助理职位
  14. 大数据与Hadoop的区别
  15. 【Linux】15 张 Vim 速查表奉上,帮你提高 N 倍效率!
  16. 怎么得到期刊论文的源代码_帮助这份开放获取期刊计划即将出版的《开放源代码策略》
  17. 哈密顿正则方程和哈密顿-雅克比方程
  18. 动易CMS如何能实现直接粘贴把图片上传到服务器中
  19. 实时填报推送微信消息及审核(帆软报表)
  20. mybatis 实现动态数据源连接

热门文章

  1. 怎么填写查新技术要点和查新点?
  2. 阿里云的一些易混概念整理
  3. NASA全球与全国12.5米高程覆盖率统计与订正说明
  4. 单片空间后方交会程序设计(代码共享)
  5. 华为交换机ssh思科交换机_关于SSH方式登录华为交换机问题
  6. 作为领导,如何既立威还不让下属反感?
  7. QQ飞车外挂敲诈木马大玩伪装术 360安全卫士率先拦截
  8. vertx源码分析(一)---------------vertx启动流程分析
  9. 自旋锁与互斥锁的区别,信号量和互斥锁的区别
  10. Mybatis RowBounds分页讲解