Uva 1339 - Ancient Cipher

题目不难,但是思路方面还是很巧妙,要注意一点,本题字母之间的映射关系并不一定是一样的,例如若 B 对应 A,那也不表明 C 就对应 B,还有一点,写代码时因为粗心,写了两遍memset(na,0,sizeof(na));而丢了memset(nb,0,sizeof(nb)); 导致输出一直有问题,看了好久才发现的,这种低级错误以后要尽量避免。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    int i,j,t,r,la,c,lb,lan,lbn;
    char a[101],b[101];
    int na[101]={0},nb[101]={0};
    while( gets(a) != NULL && gets(b) != NULL )
    {
        la=strlen(a);  lb=strlen(b);
        for(i=0; i<la; i++)
        {
            for(c=65; c<=90; c++)
            {
                if(a[i] == c)
                {
                    na[c-65]++;
                    break;
                }
            }

        }
        for(i=0; i<lb; i++)
        {
            for(c=65; c<=90;  c++)
            {
               if(b[i] == c)
               {
                   nb[c-65]++;
                   break;
               }
            }
        }
        for(i=1; i<=25; i++)
        {
            for(j=0; j<26-i; j++)
                if(na[j] > na[j+1])
                {
                    t=na[j];
                    na[j]=na[j+1];
                    na[j+1]=t;
                }
        }
        for(i=1; i<=25; i++)
        {
            for(j=0; j<26-i; j++)
                if(nb[j] > nb[j+1])
                {
                    t=nb[j];
                    nb[j]=nb[j+1];
                    nb[j+1]=t;
                }
        }
        t=1;
        for(i=0; i<=25; i++)
           if(na[i] != nb[i])
               t=0;
        if(t==1)
            printf("YES\n");
        else
            printf("NO\n");
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(na,0,sizeof(na));
        memset(nb,0,sizeof(nb));
    }
    return 0;
}


你可能感兴趣的:(Uva 1339 - Ancient Cipher)