ACM- 入门经典:函数和递归

  • 例题4-1 古老的密码:UVa1339

给定两个长度相同且不超过100的字符串,判断可否将其中一个字符串各个字母重拍,然后对26个字母做一个一一映射,使得两个字符串相同。
例如:输入JWPUDJSTVP重排后得到WJDUPSJPVT,然后子母映射(B-A,C-B,…Z-Y)
可得VICTORIOUS。
输入两个字符,输出YES或者NO

// UVa1339 Ancient Cipher
// Rujia Liu
#include<stdio.h>
#include<string.h> // strlen
#include<stdlib.h> // qsort

int cmp(const void *a, const void *b ) {
  return *(int *)a - *(int *)b;
}

int main() {
  char s1[200], s2[200];
  while(scanf("%s%s", s1, s2) == 2) {
    int n = strlen(s1);
    int cnt1[26] = {0}, cnt2[26] = {0};
    for(int i = 0; i < n; i++) cnt1[s1[i] - 'A']++;
    for(int i = 0; i < n; i++) cnt2[s2[i] - 'A']++;
    qsort(cnt1, 26, sizeof(int), cmp);
    qsort(cnt2, 26, sizeof(int), cmp);
    int ok = 1;
    for(int i = 0; i < 26; i++)
      if(cnt1[i] != cnt2[i]) ok = 0;
    if(ok) printf("YES\n"); else printf("NO\n");
  }
  return 0;
}
  • 例题 4-2 ~ 例题4 -6
    待续

你可能感兴趣的:(ACM- 入门经典:函数和递归)