POJ 2159 Ancient Cipher(水~)

Description
该题的关键就是只要知道原来信息和加密后的信息中字母的频数相同则为YES
Input
两个字符串分别表示原来信息和加密后的信息
Output
若两信息中个字母频数相同则输出YES,否则输出NO
Sample Input
JWPUDJSTVP
VICTORIOUS
Sample Output
YES
Solution
简单字符串处理,统计两串中个字母的频数,分别排完序后一一比较,全部相同则YES,否则NO
Code

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
    return *(int*)a>*(int*)b?1:-1;
}
int main()
{
    int a[26]={0},b[26]={0},i,j,k,t,lena,lenb;
    char ca[1000],cb[1000];
    gets(ca);
    gets(cb);
    lena=strlen(ca);
    lenb=strlen(cb);
    if(lena!=lenb)//如果两串长度都不相同则不可能满足条件 
        printf("NO\n");
    else
    {
        for(i=0;i<lena;i++)//统计两串各字母频数 
        {
            a[ca[i]-'A']++;
            b[cb[i]-'A']++;
        }
        qsort(a,26,sizeof(int),cmp);//排序 
        qsort(b,26,sizeof(int),cmp);
        for(i=0;i<26;i++)//一一比较 
        {
            if(a[i]==0)//未出现的不用比 
                continue;
            else if(a[i]!=b[i])//不同则不满足条件 
            {
                printf("NO\n");
                return 0;
            }
        }
        printf("YES\n");//满足条件 
    }
    return 0;
}

你可能感兴趣的:(POJ 2159 Ancient Cipher(水~))