P a r t Part Part 1 1 1 读题
刚上一年级的下头男 w h y why why看到了一篇英文文章,他并不关心这篇文章的具体内容是什么(因为看不懂),但是他对于英文字符的出现次数很感兴趣,因为这篇文章太长了,所以下头男 w h y why why想请你帮忙,统计出哪些小写英文字符出现次数最多。
输入格式
输入共一行,有若干个单词,保证单词均由小写英文字母构成。
输出格式
输出共一行,由若干个小写英文字母构成,且必须按照字典序升序输出。
输入样例1
csp is coming
输出样例1
cis
输入样例2
noip is next to csp
输出样例2
inopst
数据范围与提示
对于 50 % 50\% 50%的数据, 1 ≤ ∑ ∣ S i ∣ ≤ 10 1≤∑|S_i|≤10 1≤∑∣Si∣≤10,且输入中没有空格
对于 100 % 100\% 100%的数据, 1 ≤ ∑ ∣ S i ∣ ≤ 1 0 5 1≤∑|S_i|≤10^5 1≤∑∣Si∣≤105,保证所有单词均由小写英文字母构成
P a r t Part Part 2 2 2 思路
本题较为简易,只需要记录各个字母出现的值就可以了,但是我们要注意,本题对于后 50 % 50\% 50%的数据是有空格的,所以我们可以用 s c a n f ( scanf( scanf(“ % c \ \%c %c” ) ) )或者 c i n . g e t l i n e cin.getline cin.getline或者 g e t l i n e getline getline来吞掉空格。
求出现的最大值大家自行参考下方代码哦!
小tip:大家可以先根据思路,写一下代码哦!
P a r t Part Part 3 3 3 代码
方法1:冒泡排序算数法
#include<bits/stdc++.h>
using namespace std;
char b[30],s[100005];
int a[30],m;
int main(){
cin.getline(s,sizeof(s));
for(int i=0;i<strlen(s);i++){
char ch=s[i];
a[ch-97]++;
}
for(int i=0;i<26;i++)b[i]=char(i+97);
for(int i=0;i<26;i++){
for(int j=0;j<26-i;j++){
if(a[j]<a[j+1]){
swap(a[j],a[j+1]);
swap(b[j],b[j+1]);
}
}
}
for(int i=0;i<26;i++){
if(a[i]==a[i+1])m++;
else break;
}
for(int i=0;i<m+1;i++)cout<<b[i];
return 0;
}
方法2:寻找最大值比较法
#include<bits/stdc++.h>
using namespace std;
string s;
int mx=-1,t[250];
int main(){
getline(cin,s);
for(int i=0;i<s.size();i++)t[s[i]]++;
for(int i='a';i<='z';i++)if(t[i]>mx)mx=t[i];
for(int i='a';i<='z';i++)if(t[i]==mx)cout<<char(i);
return 0;
}
听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!