当前位置: 代码迷 >> 综合 >> 例题4-1 UVa1339 Ancient Cipher
  详细解决方案

例题4-1 UVa1339 Ancient Cipher

热度:93   发布时间:2024-01-16 14:11:16.0

要点:
思路比较难想到,因为字母可以重排,则每个字母的位置不重要,重要的每个字母出现的次数,统计每个字母出现的次数,得到两个数组cnt1[26]和cnt2[26],将两个数组分别快排,若结果相同,则说明两个字符串中对应字符数目相同(对应什么字符不要紧,可以一一映射转换)

#include<stdio.h>
#include<string.h>int cmp(const void*a, const void*b)
{return *(int*)a - *(int*)b;
}
int main()
{char s[9] = { 'A','B','C','D','E','F','G','H','I' };//简略表示char c1[100], c2[100];int cnt1[9] = {
   0};int cnt2[9] = {
   0};scanf("%s%s", c1,c2);int m = strlen(c1);for (int i = 0; i < m; i++)for (int j = 0;j < 9; j++){if (c1[i] == s[j])cnt1[j]++;if (c2[i] == s[j])cnt2[j]++;}qsort(cnt1, 9, sizeof(cnt1[0]), cmp);qsort(cnt2, 9, sizeof(cnt2[0]), cmp);int n;for (n = 0; n < 9; n++){if (cnt1[n] != cnt2[n])break;}if (n == 9) printf("YES\n");else printf("NO\n");return 0;
}

学习心得:
1.复习了一下快排,编译通过但懒得去过oj了