藍橋杯習題集_ 算法訓練 出現次數最多的整數

原文:

 算法訓練 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章