您的位置:首页 > 其它

例题4-1 UVa1339 Ancient Cipher

2015-11-06 22:43 423 查看
要点:

思路比较难想到,因为字母可以重排,则每个字母的位置不重要,重要的每个字母出现的次数,统计每个字母出现的次数,得到两个数组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
!= cnt2
)
break;
}
if (n == 9) printf("YES\n");
else printf("NO\n");
return 0;
}


学习心得:

1.复习了一下快排,编译通过但懒得去过oj了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: