您的位置:首页 > 其它

蓝桥杯习题集_ 算法训练 出现次数最多的整数

2018-02-28 20:41 246 查看
原文:

 算法训练 Anagrams问题  时间限制:1.0s   内存限制:512.0MB    问题描述  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
  输入格式:输入有两行,分别为两个单词。
  输出格式:输出只有一个字母Y或N,分别表示Yes和No。
  输入输出样例样例输入Unclear
Nuclear样例输出Y

试题分析:先考虑将所有字母变成小写,再统计每个单词出现次数。
AC代码:#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int maxn=200;
int c1[maxn];
int c2[maxn];
char f(char ch)
{
char c;
if(ch>='A'&&ch<='Z')
c=ch+32;
else if(ch>='a'&&ch<='z')
c=ch;

return c;

}
int main()
{
int i,x,ans=1;
string line1,line2;
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));

getline(cin,line1);
getline(cin,line2);

if(line1.size()!=line2.size())
cout<<"N";

//小写化
for(i=0;i<line1.size();i++)
line1[i]=f(line1[i]);
for(i=0;i<line2.size();i++)
line2[i]=f(line2[i]);

for(i=0;i<line1.size();i++)
{
x=line1[i];
c1[x]++;
}
for(i=0;i<line2.size();i++)
{
x=line2[i];
c2[x]++;
}
for(i=0;i<line2.size();i++)
{
x=line2[i];
if(c1[x]!=c2[x])
{
ans=0;
break;
}

}
if(ans)
{
cout<<"Y";
}else{
cout<<"N";
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: