题目不难,但是思路方面还是很巧妙,要注意一点,本题字母之间的映射关系并不一定是一样的,例如若 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; }