POJ2159 Ancient Cipher

  原题传送:http://poj.org/problem?id=2159

  排序。题目说了两个加密方法,判断是否可以完成从加密串到原串的转换。这道题的本质是字符出现的频率按升序(或降序)排列后是否一样,而不关心该频率是从哪一个字母转换来的。

  做这道题的过程中出现了这样的错误需要惊醒自己:

  if(len = strlen(s1) != strlen(s2)

  {

    ......

  }

  我以为会先把strlen(s1)的值赋给len再和strlen(s2)比较,但不是这样的,是先比较了strlen(s1)和strlen(s2),然后把得到的布尔值赋给len。

  这道题不需要判断字符长度是否相等,题目已经说了前提是相等的了。

View Code
 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 
 5 int h1[30], h2[30];
 6 char s1[105], s2[105];
 7 
 8 bool cmp(int a, int b){return a > b;}
 9 int main()
10 {
11     int i, len;
12     while(scanf("%s%s", s1, s2) != EOF)
13     {
14         memset(h1, 0, sizeof h1);
15         memset(h2, 0, sizeof h2);
16         len = strlen(s1);
17         for(i = 0; i < len; i ++)
18             h1[s1[i] - 'A'] ++, h2[s2[i] - 'A'] ++;
19         std::sort(h1, h1 + 26, cmp);
20         std::sort(h2, h2 + 26, cmp);
21         for(i = 0; i < 26 && h1[i] == h2[i]; i ++);
22         if(i == 26)
23             puts("YES");
24         else
25             puts("NO");
26     }
27     return 0;
28 }

  mark:POJ 100题留念!!!

原文地址:https://www.cnblogs.com/huangfeihome/p/2685059.html