这道题就是统计各个字母出现的次数是否相等。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char a[105],b[105];
int i,j,k,l,a1[26],b1[26],t;
while(~(scanf("%s%s",a,b)))
{
memset(a1,0,sizeof(a1));
memset(b1,0,sizeof(b1));
for(i=0;i<strlen(a);i++)
{
a1[a[i]-'A']++;
}
for(i=0;i<strlen(b);i++)
{
b1[b[i]-'A']++;
}
for(i=0;i<25;i++)
{
for(j=0;j<25-i;j++)
{
if(a1[j]>a1[j+1])
{
t=a1[j+1];
a1[j+1]=a1[j];
a1[j]=t;
}
}
}
for(i=0;i<25;i++)
{
for(j=0;j<25-i;j++)
{
if(b1[j]>b1[j+1])
{
t=b1[j+1];
b1[j+1]=b1[j];
b1[j]=t;
}
}
}
for(i=0;i<26;i++)
{
if(a1[i]!=b1[i])
break;
}
if(i!=26)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
排序这里可以调用库函数。如sort,所以代码也可以写成这样。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char a[105],b[105];
int i,j,k,l,a1[26],b1[26],t;
while(~(scanf("%s%s",a,b)))
{
memset(a1,0,sizeof(a1));
memset(b1,0,sizeof(b1));
for(i=0;i<strlen(a);i++)
{
a1[a[i]-'A']++;
}
for(i=0;i<strlen(b);i++)
{
b1[b[i]-'A']++;
}
for(i=0;i<25;i++)
{
for(j=0;j<25-i;j++)
{
if(a1[j]>a1[j+1])
{
t=a1[j+1];
a1[j+1]=a1[j];
a1[j]=t;
}
}
}
sort(a1,a1+26)
sort(b1,b1+26);
if(i!=26)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
注意掌握库函数是很重要的,他可以让你少犯些错误。